POCO которые; Персистентное невежество и зависимости DAL (NHibernate) - PullRequest
2 голосов
/ 01 февраля 2011

Что на самом деле означает POCO в отношении зависимостей ?

С NHibernate;дочерние коллекции извлекаются как NHibernate.Collection.Generic.PersistentGenericBag <> .Это то, что я здесь имею в виду под «зависимостями»;Если я попытаюсь сохранить / обновить граф объектов, DAL уже будет иметь свое «мнение» о том, что и как я пытаюсь сохранить.

Первоначально я думал, что запрос POCO будет нести никаких зависимостей в DAL, хранилище, ORM (не уверен, что является правильным термином в этой перспективе) .Но теперь я в замешательстве, поскольку думаю, что, возможно, это просто означает, что у класса POCO нет методов сохранения ;И что получение графа объекта POCO все еще может содержать такие зависимости?

Итак, когда вы говорите о POCO, что вы на самом деле имеете в виду?Может ли POCO иметь этот тип зависимостей, и , если он может И не может , как вы «по имени» различаете их?

POCO, который "не имеет таких зависимостей", в некотором смысле больше похож на DTO, но может иметь поведение, так что в конце концов это не DTO.

Кроме того, просто чтобы быть на 100% уверенным: я предполагаю, что DTO будет постоянным невежеством И не будет "никаких зависимостей"?

Может быть, слово "зависимости" не совсем подходящее слово, так что в случае поправьте меня.Я надеюсь, что мой вопрос все еще понятен.


EDIT1:

С дальнейшим размышлением;Может быть, мое предположение, что ... PersistentGenericBag принес с собой некоторые "зависимости", неверно (?) Возможно, это просто тип, и ничего более магического.И далее;что единственные зависимости, которые имеют объекты от NH, - это через сеансы IS, которые, конечно, мы контролируем.Имеет ли это смысл?

Ответы [ 2 ]

1 голос
/ 01 февраля 2011

POCO - это классы, которые не имеют каких-либо зависимостей от каркасов или других классов инфраструктуры.Хорошо, NHibernate использует PersistentGenericBag, но ваш POCO будет ссылаться только на класс IList.

Для вашего POCO, не имеет значения, будет ли этот экземпляр List, ReadOnlyList или PersistentGenericBag, он будет рассматривать его как IList, но будет иметь другое поведение, котороеэто не его дело.

Кстати, если вы сопоставляете свои предметные области с аннотациями, вы знаете, что они явно зависят от ORM.

1 голос
/ 01 февраля 2011

Отсутствие зависимости от ваших объектов в отношении вашего DAL - довольно утопия.Однако то, как NHibernate решил эту проблему, ИМХО довольно близко.

ИМХО, термин POCO означает, что ваши сущности (доменные объекты) не должны наследоваться от определенного базового класса или реализовывать некоторый интерфейс для работы вашего DAL.
Это относится кNHibernate.Тем не менее, для NHibernate требуются некоторые дополнительные классы для коллекций (например, класс Iese.Set), но в основном это связано с тем, что в .NET Framework в то время не было класса Set.
NHibernate использует свои собственные классы коллекций., но в большинстве случаев вы - разработчик - не беспокоитесь об этом.

При следовании принципам доменного управления ваши объекты могут быть POCO, однако ваши объекты, безусловно, не просто DTO.Сущность должна представлять собой представление о том, как эта сущность выглядит в реальном мире с данными и поведением.

DTO действительно должен быть невежественным, поскольку это объект, который можно использовать для передачи данных между уровнями.,Один из двух слоев не обязательно должен быть вашим DAL.Например, вы можете использовать DTO для передачи данных с вашего бизнес-уровня на уровень представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...