2010-08-02 9 views

Répondre

37

Au lieu de les appeler de POCO, je préfère les appeler la persistance des objets ignorants. Parce que leur travail est simple, ils n'ont pas besoin de se soucier de leur utilisation ou de la façon dont ils sont utilisés.

Personnellement, je pense que POCO sont juste un autre mot à la mode (comme le Web 2.0 - ne me lancez pas là-dessus) pour une classe publique avec des propriétés simples.

J'ai toujours utilisé ce type d'objets pour conserver l'état de l'entreprise.

Les principaux avantages de POCO sont vraiment visibles lorsque vous commencez à utiliser des éléments tels que le modèle de référentiel, les ORM et l'injection de dépendances.

En d'autres mots - vous pouvez créer un ORM (disons EF) qui retire les données de quelque part (db, service web, etc.), puis projet ces données en objets (POCO de).

Ces objets peuvent être transmis plus bas dans la pile d'applications vers la couche de service, puis vers le niveau Web.

Ensuite, si un jour vous décidez de passer à nHibernate, vous ne devriez pas du tout toucher à votre POCO, la seule chose qui devrait être changée est l'ORM.

D'où le terme «persistance ignorant» - ils se moquent de ce qu'ils sont utilisés ou comment ils sont utilisés.

Donc, pour résumer, le pro:

  • Permet un mécanisme de stockage simple pour les données, simplifie sérialisation/passant autour à travers les couches
  • va de pair avec l'injection de depedency, modèle référentiel et ORM de. La flexibilité.
  • Complexité et dépendances minimales sur les autres couches. (la couche supérieure ne s'occupe que des POCO, les POCO ne se soucient de rien). Couplage libre
  • Testabilité simple (pas de talonnage requis pour les tests de domaine).

Espérons que ça aide.

+2

Cela est parfaitement logique. J'aime votre utilisation de l'expression "mot à la mode". Il semble que je l'utilise déjà dans mon projet. L'utilisation que je fais est de tirer "quelques" données 'User' en utilisant L2S (essentiellement 4 des 10 champs de la base de données) et les stocker dans un objet" POCO "très basique. Je sérialise ensuite cet objet et le stocke en tant qu'objet 'UserData' dans le cookie d'authentification ASP.NET. Alors que je peux le récupérer plus tard sans toucher à la base de données à nouveau. –

+1

@rockinthesixstring - exactement mon point. Nous utilisons POCO depuis des années, c'est juste une autre façon d'étiqueter quelque chose. Personnellement, j'aime la combinaison de l'injection de schéma de dépôt/dépendance et ORM - dans ce scénario, vous seriez fou de ne pas utiliser POCO. Tout est dans le couplage lâche. Bien sûr, je n'ai aucune idée de la technologie que vous utilisez (je tire de mon expérience .NET) – RPM1984

+0

Oui, comme je l'ai dit dans mon commentaire, j'utilise ASP.NET - J'utilise en fait MVC2. –

3

Vous devez donner plus de détails, tels que le contexte dans lequel vous envisagez d'utiliser POCO. Mais l'idée de base est que vous créerez des objets simples contenant uniquement les données/codes nécessaires. Ces objets ne contiendraient aucun «bagage» tel que des annotations, des méthodes supplémentaires, des classes de base, etc. qui pourraient être requis par (par exemple) un framework.

+0

Les annotations, les méthodes supplémentaires et les classes de base sont les propriétés de base du langage C#.Donc, je ne vois aucune raison de ne pas les inclure dans les objets POCO ... –

0

Exemple de POCO:

class Person { 

    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string EmailAddress { get; set; } 

} 
+7

Je suis stupéfaite que cela puisse être upvoted - comment est ce pro/con, implemtnation, avantage? – RPM1984

+0

haha ​​... ah bien. J'ai passé la "réponse" à vous @ RPM1984. –