2016-11-08 3 views
1

Я заинтересован в использовании сущности framework - сначала переносится код с новой базой данных, и у меня есть некоторые вопросы/проблемы с дублированием кода POCO в информационных и бизнес-слоях.Дублирование кода POCO в разных слоях с первыми миграциями кода

Идея состоит в том, чтобы иметь уровень доступа к данным, содержащий мои объекты POCO, все декорированные элементами типа схемы базы данных, такими как длины строк, связанные с внешним ключом вещи, которые не работают из коробки, и все остальное. Этот уровень также будет действовать как репозиторий, который будет возвращать скалярные значения, сущности, агрегаты и IEnumerables.

Над этим будет бизнес-уровень, который будет обрабатывать разговоры с репозиторием и кучу бизнес-логики.

В верхней части находится слой презентации. Этот слой говорит о бизнес-слое и не имеет представления о слое данных - все, что он понимает, - это модели просмотра. Я бы использовал шаблон MVC на этом уровне, используя только модели просмотра.

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

  • Мне лучше определить модели представления в бизнес-слое или мне нужен набор моделей доменов в бизнес-слое, о котором будет знать слой презентации и с которым можно выполнить сопоставление?
    • Может ли дополнительный набор моделей доменов быть вопиющим дублированием моделей, определенных в слое данных?
+0

Модели должны были бы жить где-то, с которыми могут ссылаться как клиент, так и бизнес-уровень. Таким образом, они действуют как контракт данных между двумя слоями. Вы можете позволить бизнес-слою взаимодействовать с DAL, как вы считаете нужным, и всегда возвращать согласованный контракт данных обратно клиенту. Это будет означать, что ваши модели находятся в отдельном проекте, чем ваши взгляды и контроллеры. – SteveR

+0

Я думал об этом - Казалось бы странным иметь пустую папку модели в моем проекте MVC, но, возможно, это просто то, что мне нужно будет преодолеть. Я надеюсь узнать о других вариантах, о которых я понятия не имею :) – MavisBeacon

+0

Вы уверены, что бизнес-логика должна ссылаться на модели просмотра? –

ответ

2

В зависимости от масштаба проекта, я обычно используют один из двух методов, указанных ниже:

1) имеют набор моделей домена отдельно от всех слоев, а затем все слои ссылки их. Плюсы: слои по-прежнему независимы, нет дублирования модели, нет необходимости отображать модели слоев. Против: изменение в модели домена повлияло бы на все уровни, например. Изменение БД может нарушить отображение

2) есть модели в каждом слое. Бизнес-уровень сопоставил бы свои модели с данными уровня данных, уровень представления сопоставил бы его модели с уровнями бизнес-уровня Плюсы: каждый слой делает одну вещь, изменения в базовых моделях не распространяются через уровень Минусы: дублирование моделей вероятно, и картографирование должно поддерживаться

Первый подход лучше всего подходит для небольших приложений и сценариев «прямого обновления», второй лучше работает в крупных проектах с несколькими движущимися компонентами.

P.S. «определение моделей представления в бизнес-слое» - это определенно «нет-нет».

+0

Спасибо, что сломали различные варианты. Я думаю, будет иметь смысл определить все мои модели в общей сборке. Единственное, что кажется странным, это то, что я использую аннотации данных для информации схемы базы данных на уровне за пределами доступа к данным. – MavisBeacon

+1

, если это заставляет вас чувствовать себя странно, вы всегда можете сохранить свой poco в чистоте и сопоставить свои объекты в отдельной сборке, используя EntityTypeConfiguration <> – Fran

+0

Я буду помнить об этом. Благодаря! – MavisBeacon

 Смежные вопросы

  • Нет связанных вопросов^_^