Os ORM POCOs substituem entidades de domínio?


10

Isso é um pouco semelhante a essa pergunta, mas mais amplo.

Em geral, com ORMs como EF 4.1 suportando POCOs, agora faz sentido que as entidades do seu domínio sejam os objetos que persistem no seu banco de dados?

Com ORMs mais antigos, como EF 4 ou Linq-to-SQL, seus "objetos de banco de dados" eram gerados automaticamente e fortemente acoplados ao seu banco de dados e, portanto, para aplicativos não triviais, eram mapeados para entidades de domínio mais robustas e inteligentes antes de serem colocar para trabalhar.

A ideia dos ORMs mais novos é criar apenas entidades de domínio robustas e, em seguida, ter uma camada de dados que simplesmente forneça um mapeamento entre essas entidades de domínio e o DBMS?

Por escrito, sinto que esse sempre foi o objetivo, mas não é fácil (facilmente) possível com as ferramentas disponíveis, pelo menos não no mundo .NET.


O EFv4 também suportou mapeamento para POCOs e aulas escritas à mão.
Ladislav Mrnka

Respostas:


9

Acho que o objetivo geral dos ORMs é que o banco de dados seja mapeado diretamente para objetos de domínio, que são idealmente POCOs. Portanto, a resposta para sua pergunta é sim. Agora que a EF é capaz de mapear para POCOs, é ideal considerar esses POCOs como entidades de domínio. Para outros ORMs como o NHibernate, isso já é possível há algum tempo e acredito que as pessoas geralmente os estejam usando como tal.

Mas esse objetivo de ter entidades de domínio mapeadas diretamente para o banco de dados nem sempre é alcançável. Existem alguns casos em que há uma tradução significativa necessária entre o banco de dados e o modelo de domínio. O ORM pode não ser capaz de fazer a tradução. Nesse caso, convém uma camada de POCOs intermediários que são mapeados com o ORM para o banco de dados e, em seguida, uma camada de conversão que os altera para POCOs de domínio e vice-versa.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.