Сначала я решил создать один интерфейс, назвал его IDataAccessLayer
и начал добавлять в него все: такие методы, как GetUsers()
, GetUser(int id)
, GetOrderByNumber(int number)
, DeleteOrder(int Id)
и т. д.
Сначала это работало просто идеально. Но потом я понял, что конкретная реализация DataLayer:IDataLayer
становится большой. Я решил разрезать его на несколько частичных файлов классов. Тем не менее я чувствовал, что я делаю что-то действительно неправильно.
Затем я решил создать интерфейсы для каждой логической части, например IUsers
, IOrders
, IItems
и т. д. Не получилось, потому что я обращался к репозиторию через одно зависимое свойство, внедренное в конструктор контроллера. Поэтому я не мог просто добавлять еще одно свойство каждый раз, когда мне нужно использовать другой тип dataContext в моем контроллере.
Затем, после многих часов чтения статей об Entity Framework, я наконец понял, что должен использовать шаблоны Repository и Unit of work. И все же мне нужно как-то отделить POCO от моих объектов ViewModel, хотя почти все время они будут иметь сходство. Автомаппер очень помогает. Но теперь я не уверен, как использовать все вместе. Entity Framework, Patterns, Automapper и Injection framework, например Ninject.
У меня нет четкого понимания, как смешать все это в одну потрясающую архитектуру. Не могли бы вы показать мне несколько хороших примеров.