что такое Entity Framework с POCO - PullRequest
       9

что такое Entity Framework с POCO

32 голосов
/ 20 апреля 2010

В чем преимущество использования POCO? Я не понимаю значение невежества постоянства, что это значит? Что объект poco не может раскрыть такие вещи, как Save? Я не могу обернуть голову вокруг этого POCO, вокруг которого много шума.

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

Ответы [ 4 ]

45 голосов
/ 20 апреля 2010

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

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

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

4 голосов
/ 20 апреля 2010

POCO = Простые старые объекты CLR.

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

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

EF Сгенерированные объекты == POCO (косвенно) подключен к базе данных.

1 голос
/ 04 сентября 2013

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

0 голосов
/ 03 июня 2014

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

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

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

...