Репозиторий; Сопоставление между классами сущностей POCOs / Linq-to-Sql

Я делаю свою первую программу базы данных на Sql Express. В настоящее время я использую Linq-to-Sql для доступа к данным, и мои классы репозитория возвращают объекты типа "сущность". Значение; Я расширяю классы сущностей dbml, чтобы использовать их в качестве классов бизнес-объектов. Теперь я хочу сделать это более разделенным; и иметь объекты бизнеса POCO.

Здесь я задаюсь вопросом, какие могут быть разные решения. Мне кажется, что мне нужно вручную сопоставить свойство за свойством, каждый класс сущности в классе домена в репозиториях. У меня есть около 20 таблиц с несколькими сотнями столбцов. Теперь ... Я просто хочу проверить, является ли это обычным / типичным подходом, который вы все еще используете? И если есть альтернативы, не привносящие излишней сложности, что бы это было?


person bretddog    schedule 21.01.2011    source источник


Ответы (2)


AutoMapper - хороший инструмент для преобразования классов в классы. Однако я думаю о DAL, который сочетает в себе Linq2Sql и AutoMapper, и я думаю, почему бы просто не пойти с Fluent NHibernate? Его очень легко настроить, он работает практически с любой базой данных, включая SqlExpress, и есть провайдер Linq, который легко интегрируется. Все это бесплатный код с открытым исходным кодом и очень часто используется, поэтому имеется обширная документация и поддержка.

Если вы хотите остаться с Linq2Sql, но иметь более полнофункциональную модель предметной области, вы можете рассмотреть возможность получения модели предметной области из DTO. Это позволит вам иметь бизнес-логику в домене со свойствами, передаваемыми в DTO. Однако следует понимать, что объекты Linq2SQL не могут быть напрямую преобразованы в объекты домена; вам понадобится конструктор в домене, который принимает DTO и копирует информацию в домен (требуя хотя бы одностороннего сопоставления DTO с доменом). Однако с доменом можно обращаться как с DTO (потому что класс всегда является его родительским), поэтому обратное преобразование не требуется; просто передайте класс домена в репозиторий, где он будет ожидать DTO.

person KeithS    schedule 21.01.2011
comment
Да, я планирую передать класс домена напрямую в / из репозитория. Так что ни DTO, ни POCO, если быть точным. ... Консенсус всех обсуждений, которые я прочитал, похоже, указывает на то, что NHibernate не так прост в настройке. Так что я считаю это и для себя преждевременным. :) Но это хорошо. Моя цель с вопросом - узнать, какие решения возможны. Так что это хорошая информация для меня! - person bretddog; 21.01.2011
comment
NHibernate действительно не так уж и плох; его основное усложнение состоит в том, что он требует набора отображений объект / схема, в отличие от Linq2SQL, которому требуется просто диаграмма схемы, для которой он генерирует DTO. Настроить NHibernate для конкретной БД с учетом необходимых сопоставлений довольно просто. - person KeithS; 22.01.2011
comment
Да, я посмотрел несколько примеров NHibernate. И, по крайней мере, на первый взгляд это выглядит проще, чем я думал. Похоже, что это правильный шаг, поэтому я попробую. - person bretddog; 22.01.2011

Перед созданием сопоставлений вручную ознакомьтесь с AutoMapper

AutoMapper - это преобразователь объект-объект. Сопоставление объект-объект работает путем преобразования входного объекта одного типа в выходной объект другого типа. Что делает AutoMapper интересным, так это то, что он предоставляет некоторые интересные соглашения, позволяющие избавиться от грязной работы по выяснению того, как сопоставить тип A с типом B. Пока тип B следует установленному соглашению AutoMapper, для сопоставления двух типов требуется почти нулевая конфигурация.

person stuartd    schedule 21.01.2011
comment
Спасибо! Может это здорово. Но мне кажется немного скудной документация. Думаю, для моего уровня это доставит лишние головные боли и проблемы .. - person bretddog; 21.01.2011