Для чего я могу использовать POCO? - PullRequest
8 голосов
/ 30 октября 2009

Я прочитал несколько статей о POCO в рамках Enttity, но все еще не понимаю, для чего я могу его использовать. Как POCO может принести пользу моим проектам?

Ответы [ 4 ]

21 голосов
/ 30 октября 2009

Стандарты POCO для "Plain Old Clr Object". Это относится к стилю архитектуры ORM, где вся работа по сохранению и загрузке данных из хранилища данных выполняется системой, причем сам объект не знает, что с ним происходит. Это означает, что ORM может поддерживать полностью обычные объекты, которые не были изменены каким-либо образом с учетом ORM. ORM, поддерживающий постоянство POCO, не потребует от вас наследования вашего класса от какой-либо конкретной базы, реализации любого интерфейса или даже тегирования методов с любыми атрибутами.

Полная противоположность этому (иногда известная как объекты доступа к данным - или DAO) состоит в том, что когда все хранилище обрабатывается самим объектом, он точно знает, как сериализовать и хранить себя и как загружать себя при необходимости. В этом случае объекты должны использоваться исключительно для передачи данных и не должны представлять какую-либо бизнес-логику системы.

На самом деле это больше спектр с этими двумя ситуациями на обоих концах. Многие ORM находятся где-то посередине, требуя, чтобы постоянство обрабатывалось внешне по отношению к классу, но часто также требуется, чтобы некоторые метаданные или интерфейсы, реализованные в классах, сохранялись, чтобы помочь вещам.

EF (v1) не поддерживает POCO. Объекты должны реализовывать различные интерфейсы (чтобы обеспечить уведомление об изменениях значений свойств и т. Д.), Чтобы быть устойчивой в рамках. Я считаю, что существуют аддон-каркасы , которые пытаются добавить поддержку POCO в EF, но я не знаю, насколько они успешны. EF в .net 4.0 будет иметь поддержку POCO.

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

5 голосов
/ 30 октября 2009

POCO - это просто "Простой старый объект CLR". Это просто стандартный класс, любой стандартный класс.

С точки зрения EF, люди имеют в виду возможность настроить EF для хранения ваших собственных классов (не сгенерированных непосредственно EF) в базе данных.

1 голос
/ 30 октября 2009

POCO - это просто обычный класс, без добавленных интерфейсов или базовых классов, чтобы он работал с вашим уровнем базы данных (в этом контексте).

Преимущество: 1) нет зависимостей от этого конкретного уровня базы данных, поэтому вы можете поменять его на лучший (то есть NHibernate), не изменяя ничего, кроме уровня базы данных.

2) это облегчает юнит-тестирование ваших классов.

3) нет кода котельной плиты, чтобы уведомлять, когда свойство изменилось и т. Д. Просто простые геттеры и сеттеры.

В идеале ваши доменные объекты загружаются из ORM, при этом этот объект не должен иметь никакого отношения к тому, как он загружается, как отслеживаются изменения или как он сохраняется и т. Д.

NHibernate очень хорошо справляется с этой задачей, единственное требование - вы должны сделать все свойства / методы виртуальными, это намного лучше, чем любая жесткая зависимость.

0 голосов
/ 30 октября 2009

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

В небольших проектах это не имеет большого значения, но по мере роста проекта объектная модель (как вы проектируете свои POCO) имеет тенденцию отклоняться от схемы базы данных.

Другими методами, которые обычно используются в .Net, являются DataTables и DataSets. Обычно данные извлекаются с использованием имени столбца. Это пары вы делаете имя столбца в вашей базе данных. Если имя столбца в базе данных изменяется, код, который вы кодируете, прерывается.

...