Я работаю над веб-сайтом, и я использовал CodeIgniter в качестве моей платформы, но я все больше разочаровываюсь в том, как они злоупотребляют ООП. Я не фанат ООП, но когда я использую его, я предпочитаю достойную реализацию. Поэтому я решил быстро построить фреймворк PHP. В любом случае, я застрял в обычной для моего приложения архитектуре MVC, но мне было интересно, как можно передать модели контроллерам и библиотекам. Я бы предпочел предоставить экземпляр модели для конструктора контроллера. Что-то в этом роде
class MyController implements IController //whatever
{
public MyController(IUrlRouteModel url_route_model, IUserModel user_model)
{
//usual assignment
}
public some_action()
{
UserEntity users = user_model->find_all();
}
}
Я использую PHP, но этот пример / вопрос не связан напрямую с PHP, ответ должен быть следующим. Теперь реальный вопрос в том, где я мог бы управлять экземплярами моделей, где я мог бы их создавать. Я, вероятно, назову контроллер где-нибудь в \ Router, но передавать каждую модель конструктору маршрутизатора было бы странно. Есть ли кто-то, кто может пролить свет на эту тему. Я пытался выяснить, как это делают другие фреймворки, и это то, что у меня есть до сих пор
- Они используют ModelKeeper, который функционирует как некий тип фабрики для моделей, мне нравится эта опция, но источник этого класса станет грязным
- Модели представлены в статическом контексте. Либо каждый метод модели является статическим, либо они используют какой-то тип одноэлементного шаблона.
Поделитесь своим опытом переполнения стека? Что было бы хорошим способом реализовать это? Или, короче, какое было бы подходящее место для создания экземпляров моделей и как?
PS
Я думаю, что модель будет выглядеть примерно так
class UserModel implements IUserModel
{
public UserModel(DatabaseConnection dbc)
{ /*store for later use*/ }
}