我正在学习流行的MVC并尝试在PHP中实现它。我正在设计一个纯OOP时尚的框架(虽然我不是PHP的OOP能力专家。我对它只有适度的知识)。此框架的示例实现,如下图所示。
在这个框架中,我添加了一个数据访问层,DAL(一个处理连接,执行查询和传输到数据库和从数据库传输的类)来从系统的其余部分抽象出物理数据库,以便轻松更改数据源。如果系统仅绑定到一个特定类型的一个数据库,则该层应该仅使用一个具有一个与数据库连接的对象在系统中呈现。此对象将是所有Data Mapper对象(即User mapper,Product Mapper)的依赖项。
我正在寻找您对系统中启动DAL对象的位置的评论。我可以在前端控制器(index.php)中创建对象,并一直传输到Data Mapper对象。但根据Here和Here,这是一种反模式。即使出于同样的原因,我们也无法在工厂内启动DAL对象(工厂可以按照Clean code approach分为多个类来处理复杂性)。我不能使用Singleton,因为根据this,这也会产生很多问题。那么,在您看来,我可以启动此对象并将其传递给Data Mapper对象的最佳实践和位置是什么?
N.B。:我忽略了View Logic,因为我的关注点与Views没有任何关系。