Я знаю, что это может быть вопрос «стиля кодирования», но на данный момент я действительно запутался. В настоящее время я пытаюсь следовать шаблону MVVM (ViewModel, Repository, Controller и т.д.).
Но кто должен инициировать подключение к источнику данных? Особенно, когда более чем одному контроллеру требуется активное соединение?
Там не так много возможностей - либо каждый контроллер сам открывает новое соединение, соответствующая ViewModel открывает соединение и передает его в репозиторий, который, в свою очередь, передает его своему контроллеру, - либо соединение создается еще раньше (например, StartUp .cs).
Я знаю, что нет «идеального» решения, но я надеюсь получить вдохновение и, возможно, хорошую/лучшую практику.
Обновление 1
Пример кода:
namespace Question {
class ViewModel {
Person.Person p;
Department.Department d;
Person.PersonRepository pR;
Department.DepartmentRepository dR;
// Here in the VM both classes (Person and Department) intersect - should I inject an instance of a "IDataProvider" from here into the Repositorys?
// If so, I'd have to pass it to the repository which has to pass it to it's controller.
}
}
namespace Question.Person {
class Person {
// Person Model
}
class PersonRepository {
// This class does whatever a repository does and delegates database query to it's controller
}
class PersonController {
// Or should the Controller itself instantiate a new "IDataProvider" ?
// This class needs a connection to the databse to execute querys
}
}
namespace Question.Department {
class Department {
// Department Model
}
class DepartmentRepository {
// This class does whatever a repository does and delegates database query to it's controller
}
class DepartmentController {
// This class needs a connection to the databse to execute querys
}
}