repositoryDetailsInternal

repositoryDetailsInternal

我正在创建一个RESTful Web服务,该服务从github检索存储库详细信息并返回它们。我的代码如下所示:

@GetMapping(value = "/{owner}/{repositoryName}")
@ResponseStatus(HttpStatus.OK)
public RepositoryDetails getRepositoryDetails(@PathVariable String owner, @PathVariable String repositoryName) throws Exception {
    log.info("Github repository details request: owner: " + owner + ", repository name: " + repositoryName);
    checkParameters(owner, repositoryName);
    RepositoryDetailsInternal repositoryDetailsInternal = repoService.getRepositoryDetails(owner, repositoryName);
    RepositoryDetails repositoryDetailsOutput = new RepositoryDetails(repositoryDetailsInternal, LocaleContextHolder.getLocale());
    return repositoryDetailsOutput;
}


如您所见,有两个重要的对象:repositoryDetailsInternalrepositoryDetailsOutputrepositoryDetailsInternal是从Github解析的响应数据,而repositoryDetailsOutput是我的Web服务返回的输出对象。
我的问题是:这些对象分别是什么-实体还是值对象?
我倾向于将repositoryDetailsInternal称为实体,将repositoryDetailsOutput称为值对象,但对此我需要一些其他意见。一方面,repositoryDetailsInternal可以随时间而改变(观星者的数量会增加或减少),但在我的应用程序中,该对象是不可变的。编辑:我还应该提到repositoryDetailsInternal是使用所有者和存储库名称进行缓存的,因此它可能被视为身份:


@Cacheable(REPO_DETAILS_CACHE)
    public RepositoryDetailsInternal getRepositoryDetails(String owner, String repositoryName) throws TimeoutException  {...}


repositoryDetailsOutput也是不可变的,并且看起来像一个值对象,因为它代表了存储库状态的一种快照。

最佳答案

根据我的判断,两个对象都是Value Objects,即使Web服务返回的值可以变化,因为它们没有Identity

我可以想象一个更复杂的情况,在这种情况下它们可能会变成entities,但我不知道这是否是您的情况(即,您可以将项目的发展时间存储在星空中)。

07-27 13:45