Я опытный разработчик .NET, который в основном работает с веб-формами. Я знаком с MVC, но пока не использовал его коммерчески. В настоящее время я занимаюсь самообразованием в этой области, и я несколько смущен различиями в мнениях по предмету архитектуры, позвольте мне придать этому вопросу понимание, что нет правильного или неправильного ответа, но я просто ищу то, что элегантное решение.
Я начну с того, что говорю, что я не использую инфраструктуру сущности или какой-либо ORM - я бы хотел напрямую реализовать свои собственные бизнес-объекты и код доступа к данным (используя ADO, SPROCS и т.д.), чтобы обеспечить их оптимальность, это личное предпочтение. Именно здесь я изо всех сил пытаюсь найти согласованную информацию, поскольку большинство информации относится к использованию LINQ to SQL или Entity Framework.
MY приложение структурировано со следующими проектами:
- Веб (веб-приложение MVC 3)
- Модели (библиотека классов)
Есть только два проекта, потому что у меня проблемы с развязкой; это корень моего вопроса. Моя библиотека классов моделей содержит...
- классические бизнес-объекты с полями и свойствами
- Класс репозитория для каждого бизнес-объекта, который содержит код доступа к данным (ADO.NET прямо SqlDataReaders и т.д.)
- Интерфейс для каждого класса репозитория
Проблема, которую я имею, - это зависимость между всеми этими уровнями. Это не совсем так!
1. Бизнес-объекты должны содержать методы, реализующие бизнес-логику, поэтому помимо полей и свойств существуют методы для реализации любой требуемой логики?
2. Классы репозитория выполняют код доступа к данным, но знают о бизнес-объектах, это опять не так, код доступа к данным должен находиться в собственной библиотеке классов и ничего не знать об объектах?
3. Контроллеры (на веб-уровне) используют интерфейсы репозитория, но почему? Они не должны содержать бизнес-логику, "модель" или "бизнес-объект" должны? Контроллеры, конечно же, не должны содержать бизнес-логику, поэтому это неправильно. Я не хочу, чтобы бизнес-логика в репозиториях попадала в базу данных.
Я изо всех сил стараюсь найти элегантную архитектуру для приложения, просто базовый план того, как реализовать свои собственные объекты, свой собственный код доступа к данным и обеспечить, чтобы приложение было слабо связано. Может ли кто-нибудь предложить мне какие-либо указания?