所以我用PHP制作这个Web应用程序,我想用Domain Objects和Data Mappers创建一个体面的模型层(尽可能多),所有这些都由Services协调。
现在我在想,我应该如何创建我的对象?
但是:
DataMapper
),我必须使用反射来实际执行。其他人没有他们需要实现的set方法;我不想依赖名字,因为命名约定发生了变化)。new
关键字?但是:
我不知道,这就是我要问的原因! :P
我该怎么办?有更好的方法吗?
答案 0 :(得分:1)
Brian Vanderbusch的评论暗示了最好的方式。您应该使用依赖注入来注入所需的映射器。但是,为了减少耦合,您还应该键入提示最基本的类型,通常是接口。
如何将Data Mapper实际注入您的(推测)模型层并不重要。依赖注入容器可以存储有关哪些类需要哪些数据映射器的元数据,并自动为您注入依赖项。但是,如果不使用DIC,代码的顶级应该在最基本的级别上看起来像这样:
$model = new ProductsModel(new ProductsDataMapper(new Db('localhost', 'u', 'p', 'd')));
当然,映射器和数据库几乎肯定会在现实世界中的其他对象之间共享,并且您将传递对现有实例的引用。如果您需要在模型层中使用多个映射器,请将它们全部作为构造函数参数传递。
这里的关键是在应用程序的最顶层构建整个对象图,而不是担心在事后找到它们。这是控制反转的前提,您可以将其视为从内到外构建结构。