2017-03-10 3 views
0

Ich erstelle einen RESTful Webservice, der Repository-Details von Github abruft und sie zurückgibt. Mein Code sieht wie folgt aus:Entity vs ValueObject

@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; 
} 

Wie Sie sehen können, gibt es zwei wichtige Objekte: repositoryDetailsInternal und repositoryDetailsOutput. repositoryDetailsInternal ist die geparste Antwortdaten von Github und repositoryDetailsOutput ist das Ausgabeobjekt von meinem Webservice zurückgegeben.
Meine Frage ist: Was ist jedes dieser Objekte - eine Entität oder ein Wertobjekt?

Ich bin in Richtung Berufung repositoryDetailsInternal eine Entität und repositoryDetailsOutput ein Wertobjekt, aber ich möchte eine zweite Meinung dazu.
Auf der einen Seite, repositoryDetailsInternal ist etwas, das im Laufe der Zeit geändert werden kann (Stargazers Anzahl kann erhöhen oder verringern), aber auf der anderen Seite in meiner Anwendung ist dieses Objekt unveränderlich.
EDIT: Ich sollte auch erwähnen, dass repositoryDetailsInternal Eigentümer unter Verwendung zwischengespeichert wird und Repository-Name, so kann es als Identität wahrgenommen werden:

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



repositoryDetailsOutput ist auch unveränderlich und scheint wie ein Wertobjekt, weil Es stellt eine Art Momentaufnahme des Repository-Status dar.

+0

Vielleicht möchten Sie das? http://stackoverflow.com/questions/14161753/class-object-entity-whats-the-difference. IMHO (im) Mutabilität ist orthogonal zu "eine Entität sein", wie sie veränderlich oder unveränderlich sein können (wie Sie Entität mit beispielsweise vergangenen Ereignissen haben können, die sich nicht ändern). – Piohen

Antwort

2

Von dem, was ich beiden Objekten erzählen kann, sind Value Objects auch wenn der vom Webdienst zurückgegebene Wert variieren kann, weil sie ein nicht Identity haben.

Ich kann mir ein komplexeres Szenario vorstellen, in dem sie entities werden könnten, aber ich weiß nicht, ob dies Ihr Fall ist (d. H. Sie könnten eine zeitliche Entwicklung der Sterne eines Projekts speichern).

+0

Bitte beachten Sie die Änderung. Ändert sich Ihre Meinung zu diesem Thema? – Shem

+0

Hmm, nein. Ein GitHub-Repository scheint wie eine Entität zu sein, aber im Github-Remote-beschränkten Kontext ist in Ihrem ein Value-Objekt. –

+0

Wie auch immer, ein Ratschlag, wenn Sie unsicher sind, machen Sie es zu einem "Value Object" –

Verwandte Themen