91 votes

Quelle est la différence entre les objets de domaine, les POCO et les entités?

J'avais l'impression qu'ils sont tous fondamentalement les mêmes. Les objets du modèle sont-ils également les mêmes?

En ce moment, dans mon architecture, j'ai:

 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
    }

}
 

Alors, lesquelles des classes ci-dessus sont POCO, objet de domaine, objet de modèle, entité?

126voto

oleksii Points 17099

Ce sont des termes qui sont largement utilisés dans (Distribué) Domain Driven Design. Ils ne sont pas les mêmes. Le terme de modèle d'Objet peut être utilisé comme un synonyme pour le domaine de l'objet.

Des Objets Du Domaine. Les objets de l'activité spécifique de la région qui représentent quelque chose d'utile à l'expert du domaine. Objets du domaine sont principalement représentés par des entités et des objets de valeur. D'une manière générale, la plupart des objets qui vivent dans le domaine de la couche de contribuer à la modèle et sont des objets du domaine.

De l'entité. Un objet fondamentalement pas défini par ses attributs, mais par un fil de continuité et d'identité. (Ce qui signifie qu'il doit avoir l'Id)

POCO. Un objet simple, sans logique compliquée qui ne nécessite pas d'être identifiable, généralement, il a juste un peu de propriétés et est utilisé avec l'ORM ou comme un Objet de Transfert de Données

Mise à JOUR
Personne de la classe d'Entité et de POCO, instance de cette classe est l'Objet de Domaine
classe PersonService - Service
classe PersonRepository - Référentiel

22voto

Bob The Janitor Points 5526

fondamentalement, il en venir à la logique interne

  1. Domaine des objets internes de domaine logique des choses comme la validation, etc.
  2. Le modèle est fondamentalement une lumière de Domaine objet, qu'ils savent sur les données qu'ils détiennent, mais rien de vraiment sur la façon dont il va être utilisé
  3. Les entités qui contiennent des données et d'avoir quelques connaissances internes, d'où il vient et où il va enregistrer, mettre à jour, etc
  4. POCO contient des données et peuvent avoir une certaine connaissance de soi, des choses comme ce qui est la valeur totale de tous les éléments dans une collection de propriété
  5. DTO est le plus simple élément de tout, il contient des données et n'a pas de logique

Elles sont essentiellement utilisées pour la même chose, c'est juste comment intelligente vous le souhaitez

selon l'exemple de code La classe Personne serait un objet de domaine ou d'un modèle, les 2 autres sont un service et un référentiel. Des objets du domaine, Pocos, les modèles, les dto, etc. sont utilisés comme des messages passe d'une couche à l'autre, d'un service de classe comme PersonService est un calque de l'application et la même chose avec le Référentiel de la classe comme PersonRepository. pour une bonne vue de prendre regardez http://bob-the-janitor.blogspot.com/2009/07/n-tier-design-revisit-part-1-over-view.html dans ce cas, il est en train de parler à l'aide d'une entité de données qui est essentiellement un dto

18voto

Tejs Points 23834

C'est plus une connotation de fonction; un objet de domaine est quelque chose qui est spécifique à votre logique de mise en œuvre et peut-être plus complexe qu'une simple POCO; une entité a une connotation de représenter quelque chose (en général en référence à une persistance moyenne), et un POCO est juste un identifiant rapide pour une classe. Un modèle est juste un terme utilisé pour représenter un objet (contenant généralement de l'état et de traiter avec de l'INTERFACE utilisateur ou DB).

Ce n'est pas qu'il n'y a aucune différence fonctionnelle, ils sont juste différents termes pour mieux décrire quelque chose. Comme la différence entre la course de la voiture, le camion, et la berline familiale. Tous sont des voitures, mais chaque terme est plus descriptive.

13voto

k3b Points 5381

Il y a déjà de bonnes explications de Domaine et le Modèle dans les réponses ci-dessus.

Dans une Base de données-Contexte de l'Entité moyen d'un Élément dans une Entité de Modèle de la Relation de disquette de réparation d'urgence. (c'est à dire une Ligne dans une Table)

Dans le Microsoft Dotnet-EntityFramework-Monde Entité désigne un Objet qui peut être chargé et enregistré dans une base de données à l'aide de Données(Base), le Contexte. Habituellement, une Entité ne peut pas exister sans ses Données(Base), le Contexte. (Unité) de Tester les fonctionnalités de l'entreprise de ces classes est difficuilt.

Pocos (Plain Old CommonRuntime Objets) peut exister sans le PersistenceFramework (EntityFramework ou NHibernate) donc ils sont beaucoup plus faciles à tester.

Le mot poco est l'adaptaion de pojo (plain old java object) qui ont été créés dans le monde java pour la même raison.

3voto

MattDavey Points 5598

Un objet de domaine est une entité dans la couche de domaine de votre application, par exemple. une classe d'adresse. "Modèle" signifie la même chose - une entité dans le "Modèle de domaine".

Un POCO (simple vieil objet CLR) est un objet qui n'a pas de comportement (méthodes) défini et ne contient que des données (propriétés). Les POCO sont généralement utilisés comme DTO (objets de transport de données) pour transporter des données entre les couches, et les données sont ensuite couramment utilisées pour remplir un objet / entité de domaine.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X