Repository; Отображение между классами сущностей POCO / Linq-Sql - PullRequest
3 голосов
/ 21 января 2011

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

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

Ответы [ 2 ]

4 голосов
/ 21 января 2011

Прежде чем создавать сопоставления вручную, взгляните на AutoMapper

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

0 голосов
/ 21 января 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...