用于Code Igniter模型的完整抽象工厂模式

时间:2012-05-20 15:05:22

标签: php codeigniter design-patterns codeigniter-2 abstract-factory

我正在创建一个我使用MongoDB作为数据库的网站,我希望以后能够使用任何其他存储系统,所以我想使用抽象工厂模式的完整实现。有了完整的实现,我可以参考:

  • “Database_factory”抽象类,应由客户端代码(控制器)用来创建工厂对象。
  • “Mongodb_factory”类,扩展了Database_factory类。

  • “Customers”抽象类,代表一组查询。

  • 实现“Customers”类的“Mongodb_customers”类。 “Mongodb_customers”对象应该由“Mongodb_factory”返回。

我确切知道如何使用纯OO PHP执行此操作。但我不知道如何将它与CodeIgniter提供的模型结合起来。

很容易只有“Customers”抽象类,然后是“Mongodb_customers”来实现它,但我也想利用这些工厂。

当您需要CodeIgniter中的模型时,您只需使用“$ this-> load-> model('my_model');”并使用其功能,但如何创建工厂对象,并使其返回您需要的具体模型,您通过接口(抽象类)使用?

有没有机会实现这个目标?

感谢所有人。

1 个答案:

答案 0 :(得分:1)

嗯 - 所以你希望能够在不同的数据库实现之间切换。适配器模式不适合这个吗?您只需创建一个包装新数据库并调用该数据库的新模型。我认为抽象工厂只是用于创建一组相关/依赖对象而不暴露它们的具体类。如果那是你想要做的,那么我认为你可以创建一个充当工厂的模型,然后是扩展抽象类模型的其他模型(我从未尝试过这个但我想你可以尝试在一个模型中加载它类来扩展它)。这样当你加载工厂时,你可以调用其中一个方法,它的方法将为你加载正确的实现(加载发生在你工厂的方法中)。