Czy ORM POCO zastępują jednostki domeny?

10

Jest to nieco podobne do tego pytania, ale bardziej ogólne.

Ogólnie rzecz biorąc, czy w przypadku ORM, takich jak EF 4.1 obsługujących POCO, ma sens, aby jednostki domeny były obiektami utrwalonymi w bazie danych?

W przypadku starszych ORM, takich jak EF 4 lub Linq-to-SQL, „obiekty bazy danych” były generowane automatycznie i ściśle powiązane z bazą danych, a zatem w przypadku nietrywialnych aplikacji były mapowane na bardziej niezawodne, inteligentne jednostki domeny, zanim zostały zabrać do pracy.

Czy w nowszych ORM jest pomysł, aby po prostu zbudować solidne jednostki domeny, a następnie mieć warstwę danych, która po prostu zapewnia mapowanie między tymi jednostkami domeny a Twoim DBMS?

Pisząc, mam wrażenie, że zawsze był to cel, ale nie łatwo (łatwo) możliwy z dostępnymi narzędziami, przynajmniej nie w świecie .NET.

Adam Rackis
źródło
EFv4 wspierał także mapowanie do POCO i klas pisanych ręcznie.
Ladislav Mrnka

Odpowiedzi:

9

Myślę, że ogólnym celem ORM jest odwzorowanie bazy danych bezpośrednio na obiekty domeny, które są idealnie POCO. Odpowiedź na twoje pytanie brzmi: tak. Teraz, gdy EF jest w stanie mapować do POCO, idealnie jest rozważyć te POCO jako jednostki domeny. W przypadku innych ORM, takich jak NHibernate, było to możliwe przez pewien czas i uważam, że ludzie używają ich jako takich.

Ale ten cel polegający na bezpośrednim zamapowaniu jednostek domeny na bazę danych nie zawsze jest możliwy do osiągnięcia. W niektórych przypadkach konieczna jest znacząca translacja między bazą danych a modelem domeny. ORM może nie być w stanie wykonać tłumaczenia. W takim przypadku może być potrzebna warstwa pośrednich POCO, które są mapowane za pomocą ORM do bazy danych, a następnie warstwa translacji, która zamienia je w domenowe POCO i z powrotem.

RationalGeek
źródło