Я разрабатываю приложение N-уровня, и я столкнулся с трудностью, с которой у вас может быть решение. Уровень представления - MVC.
Мой ORM выполняется с использованием LinqToSQL - это отдельный проект, который обслуживает репозитории.
Каждый репозиторий имеет интерфейс и не менее 1 конкретную реализацию.
Репозитории имеют следующие методы: FindAll(), Save(T entity), Delete(int id)
FindAll()
возвращает IQueryable какого-либо типа, что означает, что он возвращает запросы, к которым я могу применить фильтры.
Отображение ORM было выполнено с использованием методологии Database First, где сначала были созданы таблицы, а затем SQL Server были созданы классы.
Я добавил слой Pipeline, который работает с репозиториями. Он применяет дополнительные фильтры к запросам. Например. OrderRepository.FindAll().Where(o => o.CustomerId == 10)
Pipeline также возвращает IQueryable какого-либо типа, что означает, что я могу передать его дальше по слою и делать с ним больше.
В этот момент я бы хотел перейти на уровень BusinessLogic, но я больше не хочу работать с сущностными моделями, я хочу преобразовать модель сущности в модель домена. Это означает, что я могу добавить валидацию к модели и использовать эту модель в уровне представления. Модель не может быть определена в проекте MVC, поскольку она будет зависеть от уровня представления, так что no.
Я уверен, что бизнес-логика (поведение) и модель должны храниться отдельно от уровня конвейера, данных и представления. Вопрос в том, где?
Например, конвейер имеет три метода: 1. FindByCustomerId 2. FindByOrderId 3. FindBySomethingElse
Все эти методы возвращают IQueryable of Order. Мне нужно преобразовать это в модель домена, но я не хочу делать это для каждого метода, поскольку он не будет поддерживаться.
Я чувствую, что эта модель достаточно надежна и масштабируема. Я просто не вижу, какое место лучше всего подходит для сопоставления объектов с моделью домена и наоборот.
Спасибо