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