因此,我正在用PHP制作此Web应用程序,并且我想(尽可能多地)使用Domain Objects和Data Mappers制作一个体面的模型层,所有这些都由Services精心组织。
现在我在想,我应该如何创建我的对象?
工厂吗
但是之后:
DataMapper
。其他对象没有设置所需的设置方法;我不想依赖名称,因为命名约定会发生变化),则我必须使用反射来实际实现。 。 new
关键字?但是之后:
还要别的吗?
我不知道,这就是为什么我要问! :P
我应该怎么办?有更好的方法吗?
最佳答案
布莱恩·范德布施(Brian Vanderbusch)的评论暗示了最好的方法。您应该使用“依赖注入(inject)”来注入(inject)所需的映射器。但是,为减少耦合,您还应该键入提示最基本的类型,通常是接口(interface)。
实际如何将Data Mapper注入(inject)到(可能是)模型层中并不重要。依赖项注入(inject)容器可以存储有关哪些类需要哪些数据映射器的所有元数据,并自动为您注入(inject)依赖项。但是,在不使用DIC的情况下,代码的顶层在最基本的级别上应如下所示:
$model = new ProductsModel(new ProductsDataMapper(new Db('localhost', 'u', 'p', 'd')));
当然,映射器和数据库几乎可以肯定会在现实世界中的其他对象之间共享,并且您会将引用传递给现有实例。如果在模型层中需要多个映射器,请将它们全部作为构造函数参数传递。
这里的关键是在应用程序的最顶层构建整个对象图,而不用担心事后查找它们。这是控制反转的前提,您可以将其视为从内而外构建结构。
关于php - 我应该如何创建数据映射器/域对象/服务?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19571271/