Являются ли классы, сгенерированные LINQ, POCO?

Считаются ли классы, созданные LINQ (DBML), POCOs? Если я добавлю к этим классам статические запросы, останутся ли они POCO?

Я полагаю, что это изменится, когда я начну заниматься бизнесом с использованием частичных компонентов LINQ. Например, добавление других атрибутов, создание коллекций и, по сути, превращение частичных объектов в нечто большее, чем классы DAL.

Если классы LINQ являются POCO, каков еще один пример?


person 4thSpace    schedule 10.02.2009    source источник


Ответы (3)


Я бы сказал, нет. Класс, созданный дизайнером Linq to SQL, обладает приличным интеллектом.

person Dave Markle    schedule 10.02.2009

Ну, по крайней мере, они не наследуют какой-либо специальный базовый класс. И большую часть кода вы можете просто удалить - LINQ-to-SQL в этом не нуждается. Но обратите внимание, что при этом вы потеряете множество улучшений, таких как более эффективное отслеживание изменений (без событий, связанных с изменением свойств) и отложенная загрузка для отношений.

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

person MichaelGG    schedule 11.02.2009

Краткий ответ: нет. Классы, созданные LINQ to SQL, содержат логику сохранения базы данных, которая требуется LINQ to SQL для правильной работы. POCO, по определению, не имеют такого кода.

person Eric King    schedule 11.02.2009
comment
Я до сих пор не понимаю, что такое POCO. Это настолько субъективное значение, что не имеет смысла. Каков реальный пример POCO? - person 4thSpace; 11.02.2009
comment
Мое определение: объект, основанный на классе, который знает только о себе и заботится только о себе. Он содержит члены, свойства и методы, которые не зависят от внешних сущностей. Как только он имеет дело с внешними зависимостями (например, с фреймворком персистентности или механизмом ведения журнала), он больше не POCO. - person Eric King; 11.02.2009
comment
Похоже на служебный класс. Что-то независимое от бизнес-логики. Но все же, каков пример из реального мира? - person 4thSpace; 11.02.2009
comment
Другими словами, объект Person будет POCO, если он содержит такие свойства, как FirstName и LastName и DateOfBirth, а также простые автономные методы, такие как GetAge () и GetFullName (). Когда добавляется такой метод, как SaveToDB (), он теперь зависит от внешней инфраструктуры и не является POCO. - person Eric King; 11.02.2009
comment
Спасибо. Итак, если бы это был MVC, они бы жили в модели чуть выше DAL? Что, если GetAge () вычисляет возраст в реальном времени? Что, если у него есть свойство с именем AddressHistory типа List ‹Address›, которое лениво извлекает адреса из БД? - person 4thSpace; 11.02.2009
comment
Вопрос о том, использовать ли POCO и как его использовать, является предметом многочисленных споров ... Но в целом, да, POCO обычно используются в модели предметной области чуть выше DAL (возможно, в репозитории?). Существует также много разных мнений о том, как POCO следует разрешить ленивую загрузку детей и при этом считаться POCO. - person Eric King; 11.02.2009
comment
В порядке. Действительно ли это полезный термин, если бы у него нет четкого определения? Это означает, что каждый человек, с которым вы разговариваете, будет иметь собственное значение / интерпретацию POCO. Еще раз спасибо. - person 4thSpace; 11.02.2009
comment
Что ж, вероятно, это так же полезно, как и большинство других терминов. С такой же вероятностью вы найдете различные определения «DAL», «ленивая загрузка», «репозиторий» и «объектно-ориентированный». Очень немногие термины в этой отрасли имеют четкие определения, но каким-то образом нам все же удается общаться ... - person Eric King; 11.02.2009