it-swarm.com.de

Was ist der Unterschied zwischen Domänenobjekten, POCOs und Entitäten?

Ich hatte den Eindruck, dass sie im Grunde alle gleich sind. Sind Modellobjekte auch gleich?

Momentan habe ich in meiner Architektur:

class Person 
{

    public string PersonId;        
    public string Name;
    public string Email;

    public static bool IsValidName() { /* logic here */ }
    public static bool IsValidEmail() { /* logic here */ }
}


class PersonService
{
    private PersonRepository pRepository;

    PersonService()
    {
        pRepository = new PersonRepository();
    }

    public bool IsExistingEmail(string email)
    {
        //calls repo method to see if email is in db
    }


    public Person GetPerson(email)
    {
        return pRepository.Get(email);
    }


    public void SavePerson(Person p)
    {
        if (Person.IsValidEmail(p.Email) && !IsExistingEmail(p.Email)
        {
            pRepository.Save(p);
        }
    }

}


class PersonRepository
{
    public void Save(Person p)
    {
        //save to db
    }

    public Person Get(string email)
    {
        //get from db
    }

    public bool IsExistingEmail(string email)
    {
        //see if email in db
    }

}

Also, welche der oben genannten Klassen sind POCO, Domain Object, Model object, entity?

72
jpshook

Meine (nicht standardmäßigen) Layman-Definitionen

  • POCO - Normales altes% Insert_Your_Language% -Objekt. Ein Typ ohne Logik. Es speichert nur Daten im Speicher. Normalerweise sehen Sie darin nur automatische Eigenschaften, manchmal Felder und Konstruktoren.
  • Domain object eine Instanz einer Klasse, die mit Ihrer Domain zusammenhängt. Ich würde wahrscheinlich alle Satelliten- oder Dienstprogrammobjekte vom Domänenobjekt ausschließen, z. In den meisten Fällen enthalten Domänenobjekte keine Elemente wie Protokollierung, Formatierung, Serialisierung, Verschlüsselung usw., es sei denn, Sie erstellen ein spezielles Produkt zum Protokollieren, Serialisieren, Formatieren oder Verschlüsseln.
  • Model object Ich denke, ist das gleiche wie Domain object. Leute neigen dazu, dies synonym zu verwenden (ich kann mich irren)
  • Entity eine Klasse mit id
  • Repository eine Klasse, die mit einem Datenspeicher von einer Seite (z. B. einer Datenbank, einem Datendienst oder ORM) und mit dem Dienst, der Benutzeroberfläche, der Geschäftsschicht oder einer anderen anfordernden Stelle spricht. In der Regel werden alle datenbezogenen Dinge (wie Replikation, Verbindungspooling, Schlüsselbeschränkungen, Transaktionen usw.) ausgeblendet, und es ist einfach, nur mit Daten zu arbeiten
  • Service Software, die einige Funktionen normalerweise über die öffentliche API bereitstellt. Je nach Ebene kann es sich beispielsweise um einen in sich geschlossenen REST-Container oder eine Klasse handeln, mit der Sie eine bestimmte Instanz des benötigten Typs finden können.

Ursprüngliche Antwort

Dies sind Begriffe , die hauptsächlich im (verteilten) domänengetriebenen Design verwendet werden. Sie sind nicht gleich. Der Begriff Modellobjekt kann synonym zum Domänenobjekt verwendet werden.

Domänenobjekte. Objekte aus dem geschäftsspezifischen Bereich, die für den Domänenexperten von Bedeutung sind. Domänenobjekte werden meist durch Entitäten und Wertobjekte dargestellt. Im Allgemeinen tragen die meisten Objekte, die in der Domänenschicht leben, zum Modell bei und sind Domänenobjekte.

Entität. Ein Objekt, das grundsätzlich nicht durch seine Attribute definiert ist, sondern durch einen Faden von Kontinuität und Identität. (Bedeutet, dass es muss Id )

POCO. Ein einfaches Objekt ohne komplizierte Logik. Normalerweise hat es nur wenige Eigenschaften und wird mit ORM oder als Datenübertragungsobjekt verwendet

class Person - Entität und POCO, Instanz dieser Klasse ist Domain Object
class PersonService - Bedienung
class PersonRepository - Repository

92
oleksii

Es ist eher eine Konnotation der Funktion; Ein Domänenobjekt ist spezifisch für Ihre Logikimplementierung und möglicherweise komplexer als ein einfacher POCO. Eine Entität hat eine Konnotation, um etwas darzustellen (normalerweise in Bezug auf ein Persistenzmedium), und ein POCO ist nur eine schnelle Kennung für eine Klasse. Ein Modell ist nur ein Begriff, der zur Darstellung eines Objekts verwendet wird (enthält normalerweise den Status und behandelt normalerweise die Benutzeroberfläche oder die Datenbank).

Es ist nicht so, dass es einen funktionalen Unterschied gibt, sie sind nur verschiedene Begriffe, um etwas genauer zu beschreiben. Wie der Unterschied zwischen Rennwagen, Lastwagen und Familienlimousine. Alle sind Automobile, aber jeder Begriff ist aussagekräftiger.

18
Tejs

im Grunde kommt es auf die interne Logik an

  1. Domänenobjekte verfügen über interne Domänenlogik, z. B. Validierung usw.
  2. Das Modell ist im Grunde ein leichtes Domain-Objekt. Sie kennen die Daten, die sie enthalten, wissen aber nicht wirklich, wie sie verwendet werden sollen
  3. Entitäten speichern Daten und verfügen über interne Kenntnisse darüber, woher sie stammen und wo sie gespeichert, aktualisiert usw. Werden
  4. POCO enthält Daten und verfügt möglicherweise über interne Kenntnisse über sich selbst, z. B. über den Gesamtwert aller Elemente in einer Eigenschaftensammlung
  5. DTO ist das einfachste Element von allen, es enthält nur Daten und hat keine Logik

Sie werden alle im Grunde genommen für dasselbe verwendet, es ist nur so schlau, wie Sie es wollen

die Person-Klasse ist ein Domain-Objekt oder ein Modell, die anderen beiden sind ein Service und ein Repository. Domänenobjekte, Pocos, Modelle, Dtos usw. werden verwendet, als würden Nachrichten von einer Ebene zur nächsten weitergeleitet. Eine Serviceklasse wie PersonService ist eine Ebene in der Anwendung und dieselbe wie die Repository-Klasse wie PersonRepository. Eine gute Übersicht finden Sie unter http://bob-the-janitor.blogspot.com/2009/07/n-tier-design-revisit-part-1-over-view.html In diesem Fall geht es um die Verwendung einer Datenentität, die im Grunde genommen ein Dto ist

15
Bob The Janitor

In den obigen Antworten finden Sie bereits gute Erklärungen zu Domain und Model.

In einem Datenbank-Kontext bedeutet Entität Item in einem Entity Relationship Model ERD . (d. h. eine Zeile in einer Tabelle)

In der Microsoft-Dotnet-EntityFramework-World Entität bedeutet ein Objekt, das aus einer Datenbank unter Verwendung eines Datenbankkontexts geladen und in einer Datenbank gespeichert werden kann. Normalerweise kann eine Entität ohne ihren Datenbankkontext nicht existieren. Das Testen der Geschäftsfunktionalität dieser Klassen ist schwierig.

Pocos (Plain Old CommonRuntime Objects) kann ohne das PersistenceFramework (EntityFramework oder NHibernate) existieren, daher sind sie viel einfacher zu testen.

Das Wort poco ist die Adaption von pojo (plain old Java object) , die aus dem gleichen Grund in der Java world erstellt wurden .

11
k3b

Nur ein Designtipp.

Anstelle der Verwendung:

class PersonService
{
    private PersonRepository pRepository;

    PersonService()
    {
        pRepository = new PersonRepository();
    }
}

Verwenden:

class PersonService
{
    private PersonRepository pRepository;

    PersonService(PersonRepository pRepository)
    {
        this.pRepository = pRepository;
    }
}

Bereitstellen einer Abhängigkeitsinjektion für PersonService.

5

Ein Domänenobjekt ist eine Entität in der Domänenschicht Ihrer Anwendung, z. eine Adressklasse. "Modell" bedeutet dasselbe - eine Entität im "Domänenmodell".

Ein POCO (einfaches altes CLR-Objekt) ist ein Objekt, für das kein Verhalten (Methoden) definiert ist und das nur Daten (Eigenschaften) enthält. POCOs werden im Allgemeinen als DTOs (Datentransportobjekte) zum Übertragen von Daten zwischen Ebenen verwendet, und die Daten werden dann üblicherweise zum Auffüllen eines Domänenobjekts/einer Domänenentität verwendet.

2
MattDavey