2010-04-20 3 views
29

В чем преимущество использования POCO? Я не понимаю смысла Персистирующего Неведения, что это значит? Что объект poco не может выставлять такие вещи, как «Сохранить»? Я не могу обернуть голову вокруг этого POCO, что вокруг много шума.Что такое Entity Framework с POCO

В чем разница с генерируемыми EF объектами и POCO?

ответ

42

POCO означает «Обычный Старый объект C#» или «Обычный объект CLR», в зависимости от того, кого вы спросите. Если инфраструктура или API заявляет, что она работает с POCO, это означает, что она позволяет вам определить вашу объектную модель idiomatically, не создавая наследование ваших объектов из определенных базовых классов. Вообще говоря, рамки, которые работают на POCO, позволяют вам больше свободы и контроля над дизайном и внедрением ваших классов, потому что у них меньше требований к правильной работе.

Несознание настойчивости означает, что все, что возможно в вашем коде, работающем на уровне бизнес-логики или выше, ничего не знает о фактическом дизайне базы данных, о том, какой механизм базы данных вы используете, или о том, как и когда объекты извлекается из базы данных или сохраняется. В случае MEF несоблюдение персистентности достигается при работе с POCO и использовании LINQ для выполнения запросов (т. Е. Не требуя от пользователя создания каких-либо SQL-запросов для извлечения желаемых объектов).

Это открытый вопрос, но в целом считается, что в большинстве случаев объекты домена (или бизнес-объекты - в любом случае, упомянутые выше POCO) должны быть не осведомлены о логике сохранения. Значение, вместо вызова MyBusinessObject.Save(), у вас есть менеджер IO или класс адаптера, и вы вызываете Manager.Save(MyBusinessObject). Таким образом, вы избегаете подвергать семантику персистентности вашим бизнес-объектам - вы лучше разбираетесь в проблемах.

+5

Но с создаваемыми объектами EntityFramework мы получаем это разделение уже с генерируемыми классами, которые наследуют от ObjectContext, до сохранения и классов, представляющих объект. Я читаю статью о журнале msdn на EF 4.0 и есть раздел о POCO, в статье автор создает объект с нуля ... Разве мы не можем использовать созданные сущности? Разве они не POCO? – pdiddy

+0

Можете ли вы разместить ссылку на статью? Если ваша инфраструктура требует, чтобы ваши классы * entity * извлекались из определенного базового класса или включали атрибуты, специфичные для конкретной среды, или реализовали интерфейсы фреймворка, тогда он не поддерживает POCO. Если EF 4.0 не устанавливает требования базового класса или атрибуции для своих классов сущностей, то он поддерживает POCO. Обратите внимание, что это ограничение не применяется к классам, которые специально предназначены для управления семантикой персистентности - они * имеют *, чтобы быть связаны с постоянством, и говорить о POCO там отсутствует. – Dathan

+2

EF по умолчанию будет использовать 'EntityObject' в качестве базового класса для всех своих объектов -> определенно не POCO. * BUT *: с EF4 у вас есть возможность включить поддержку POCO, и в этом случае ваши классы не получаются из какого-либо определенного базового класса, не нужно реализовывать какой-либо конкретный интерфейс и не нуждаются в каких-либо атрибутах либо -> чистый POCO. –

3

POCO = Обычные старые объекты CLR.

Plain старого CLR (то есть C# или VB) объекты означает, что я могу говорить C# или VB все время, я пишу свою программу, и не придется беспокоиться о эзотерическом языке базы данных, как

UPDATE MYTABLE SET MYFIELD1 = @MYPARAMETER1, MYFIELD2 = @MYPARAMETER2 BLAH BLAH 

EF Generated лица == POCO подключен (косвенно) к базе данных.

+1

Обычные объекты CLR - это ближе к истине. Это отлично работает с VB.Net или любыми другими языками, совместимыми с CLS. – sblom

0

Класс POCO - это класс, который не зависит от базового класса, определенного базой. Это похоже на любой обычный класс .net, поэтому он называется «Обычные старые объекты CLR». Эти объекты POCO (также называемые объектами, не поддерживающими сохранение) поддерживают большинство тех же запросов LINQ, что и производные объекты EntityObject.

0

POCO = обычный старый CLR объектов

POCO Преимущества:

Технология агностицизм блаженством: Эта концепция, как правило, вращаясь вокруг PI (Persistence Неведении), но не только это. Сохранение Незнание означает, что ваши сущности должны быть очищены от каких-либо ограничений, связанных с постоянством, которые накладывают на вас рамки - обычно ORM. Это, например, если у вас есть сопоставление уровня атрибута, где эти атрибуты не являются частью вашего домена, но есть только потому, что какая-то инфраструктура хочет, чтобы они были там, то ваш домен не является ненасыщенным. Sidar said here

Смежные вопросы