Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用于代码点火器模型的完整抽象工厂模式_Php_Codeigniter_Design Patterns_Codeigniter 2_Abstract Factory - Fatal编程技术网

Php 用于代码点火器模型的完整抽象工厂模式

Php 用于代码点火器模型的完整抽象工厂模式,php,codeigniter,design-patterns,codeigniter-2,abstract-factory,Php,Codeigniter,Design Patterns,Codeigniter 2,Abstract Factory,我正在创建一个网站,其中我使用MongoDB作为数据库,我还希望将来能够使用任何其他存储系统,因此我希望使用抽象工厂模式的完整实现。通过全面实施,我指的是: “Database_factory”抽象类,客户端代码(控制器)应使用该抽象类创建工厂对象 “Mongodb_工厂”类,它扩展了数据库_工厂类 表示一组查询的“Customers”抽象类 实现“customers”类的“Mongodb_customers”类。“Mongodb_客户”对象应由“Mongodb_工厂”返回 我完全知道如何使

我正在创建一个网站,其中我使用MongoDB作为数据库,我还希望将来能够使用任何其他存储系统,因此我希望使用抽象工厂模式的完整实现。通过全面实施,我指的是:

  • “Database_factory”抽象类,客户端代码(控制器)应使用该抽象类创建工厂对象
  • “Mongodb_工厂”类,它扩展了数据库_工厂类

  • 表示一组查询的“Customers”抽象类

  • 实现“customers”类的“Mongodb_customers”类。“Mongodb_客户”对象应由“Mongodb_工厂”返回
我完全知道如何使用纯OO PHP实现这一点。但我不知道如何将它与CodeIgniter提供的模型架构合并

只需要“Customers”抽象类和“Mongodb_Customers”来实现它是很容易的,但我也想利用工厂

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

有机会做到这一点吗


感谢大家。

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

仅仅因为您使用Codeigniter并不意味着您必须遵守其(少数)约定。你能用香草PHP解决这个问题吗?您在尝试在Codeigniter中实现这一点时遇到了哪些具体问题?我试图不打破Codeigniter提供的模型调用方式。使用一个框架而不坚持做事情是没有多大意义的。这就是为什么我想弄清楚我是否可以使用这个模式,而不只是从MVC框架中删除模型。CI是一种不碍事的框架,可以让你按照自己的方式做事情,这就是我喜欢它的原因。我不喜欢每个类/库/模型只有一个实例,而强制构造函数只接受一个“config”数组。如果这是另一个更健壮的框架,我可能会同意,最好坚持预定的约定。我仍然在问-到目前为止您遇到了什么具体的问题?我的问题是CI提供的加载模型的唯一方法是调用“this->load->model('my_model')”,然后您只需调用“this->my_model->my_function()”,我不知道如何加载接口模型,然后将工厂返回的具体对象分配给该接口。或者我应该像纯OO PHP一样使用它,忘记“加载->模型”吗?如果我看到一些示例代码,我可以给出更好的建议,尽管我不熟悉“抽象工厂模式”。我相信这两种方法都可以做到,CI模型本身毕竟只是PHP类,它们不必扩展
CI_模型
(或任何东西)。当你说“加载”界面时,这是你不能用
包含
来处理的吗?我只是不确定具体的问题是什么。