当Class_a偶尔需要Class_b信息时,PHP的最佳设计模式是什么?

时间:2010-07-17 18:10:31

标签: php language-agnostic design-patterns oop

这个项目是用PHP编写的,但与语言无关。我正在构建一个具有以下MVC格式的项目

Main_Class
Main_Class_Common
  --> Class_A
  --> Class_B
  --> Class_C
  --> Class_...
  --> Class_K

原始请求转到Main_Class,然后包含相应的主子类。大多数请求只需要访问其自己的类中的数据。但是,有一小部分跨类数据。所有子类都需要始终访问Main_Class_Common中的共享公共函数。

例如,

Main_Class
Main_Class_Common
  --> Class_Projects
  --> Class_Clients

通常,Class_Projects从不需要来自Class_Clients的数据,除了在一个函数中它可能需要调用$class_clients->get_client_details($client_id);,而反向偶尔会发生相同的事情。

但两个班级都需要能够拨打$main_class_common->clean_input($myinput);

目前,我正在使用Class class_a extends main_class_common()访问共享功能,这些功能完美无缺。但是是从Class_A访问Class_B以便偶尔访问全局$ class_b变量的最佳方式,或者我是否应该将可能的共享函数移动到Main_Class_Common中,即使它们只是偶尔使用?

该项目目前处于开发阶段的早期阶段,因此可以轻松更改当前的实施。

1 个答案:

答案 0 :(得分:1)

repository pattern适合这里。创建一个Class_ProjectRepository类和Class_ClientRepository类,其中包含get_client_details($client_id)等方法。

MVC控制器类将使用存储库。例如,Class_ProjectsClass_Clients都可以使用Class_ClientRepository来检索客户详细信息。

存储库类将构建查询并调用您的DAL。此外,如果您需要控制器中的实际域对象(例如Class_Client),则还应使存储库负责将DAL结果集转换为域对象。