POCO означает «Обычный Старый объект C#» или «Обычный объект CLR», в зависимости от того, кого вы спросите. Если инфраструктура или API заявляет, что она работает с POCO, это означает, что она позволяет вам определить вашу объектную модель idiomatically, не создавая наследование ваших объектов из определенных базовых классов. Вообще говоря, рамки, которые работают на POCO, позволяют вам больше свободы и контроля над дизайном и внедрением ваших классов, потому что у них меньше требований к правильной работе.
Несознание настойчивости означает, что все, что возможно в вашем коде, работающем на уровне бизнес-логики или выше, ничего не знает о фактическом дизайне базы данных, о том, какой механизм базы данных вы используете, или о том, как и когда объекты извлекается из базы данных или сохраняется. В случае MEF несоблюдение персистентности достигается при работе с POCO и использовании LINQ для выполнения запросов (т. Е. Не требуя от пользователя создания каких-либо SQL-запросов для извлечения желаемых объектов).
Это открытый вопрос, но в целом считается, что в большинстве случаев объекты домена (или бизнес-объекты - в любом случае, упомянутые выше POCO) должны быть не осведомлены о логике сохранения. Значение, вместо вызова MyBusinessObject.Save()
, у вас есть менеджер IO или класс адаптера, и вы вызываете Manager.Save(MyBusinessObject)
. Таким образом, вы избегаете подвергать семантику персистентности вашим бизнес-объектам - вы лучше разбираетесь в проблемах.
Но с создаваемыми объектами EntityFramework мы получаем это разделение уже с генерируемыми классами, которые наследуют от ObjectContext, до сохранения и классов, представляющих объект. Я читаю статью о журнале msdn на EF 4.0 и есть раздел о POCO, в статье автор создает объект с нуля ... Разве мы не можем использовать созданные сущности? Разве они не POCO? – pdiddy
Можете ли вы разместить ссылку на статью? Если ваша инфраструктура требует, чтобы ваши классы * entity * извлекались из определенного базового класса или включали атрибуты, специфичные для конкретной среды, или реализовали интерфейсы фреймворка, тогда он не поддерживает POCO. Если EF 4.0 не устанавливает требования базового класса или атрибуции для своих классов сущностей, то он поддерживает POCO. Обратите внимание, что это ограничение не применяется к классам, которые специально предназначены для управления семантикой персистентности - они * имеют *, чтобы быть связаны с постоянством, и говорить о POCO там отсутствует. – Dathan
EF по умолчанию будет использовать 'EntityObject' в качестве базового класса для всех своих объектов -> определенно не POCO. * BUT *: с EF4 у вас есть возможность включить поддержку POCO, и в этом случае ваши классы не получаются из какого-либо определенного базового класса, не нужно реализовывать какой-либо конкретный интерфейс и не нуждаются в каких-либо атрибутах либо -> чистый POCO. –