PHP MVC - 模型需要从另一个模型访问数据



我构建了一个小型的PHP MVC框架,只想阐明将数据从一个模型获取到另一个模型的最佳方法。例如:

我有一个包含一个名为 get_users(( 的方法的Users_model

我也有需要获取特定或所有用户数据的Communications_model,因此需要从Users_model访问 get_users(( 方法。

最佳做法是:

a( 在控制器中实例化Users_model并将数据从 get_users(( 方法传递到Communications_model

b( 在Communications_model中实例化Users_model并从那里运行 get_users((,以便可以直接访问它?

c( 另一种方式?

非常感谢任何帮助。

这取决于你背后的动机。

  1. 如果你想对结果产生影响,那么使用众所周知的库,如教义等应该是你的选择。
  2. 如果你想学习设计模式,那么你应该阅读ActiveRecord或DataMapper + Repository模式。然后实现两者并结帐。
  3. 如果你想要你的代码,这样 - ORM应该表示数据的关系,那么你应该问它更重要吗?如果您进行通信(公共汽车,火车(,则可以分配用户,并且可以从通信中获取用户。如果用户有通信(如汽车(,则关系颠倒。

一切都取决于,你背后的动机是什么。使用库,如 Doctrine,你能帮助你运行你的应用程序吗?如果您想学习设计模式,请查看这两个选项以获得一些经验。

你所说的"用户模型"是一个存储库。你所谓的"沟通模式"看起来像一种服务。

通信服务应将用户存储库作为依赖项传入构造函数。

老实说,我认为,你困惑的很大一部分是你试图称所有这些东西为"模型"。这些类不属于同一层。 你可能会发现这个答案很有用。

所有这些都是可能的方法,但我通常做的是,每当有任何我认为会被许多对象重用的函数时,我都会将其声明为 static

它将节省使用对象声明的工作量,并且可以通过ClassName::function();轻松访问

同样,这是一个设计选择,通常对象在控制器中声明并根据需要使用,但只是为了一次又一次地保存对象的声明,我遵循声明函数static的方法。

这里的简单原则是使用__construct()(构造函数(使用数据库中的相关属性构建对象。用户模型将具有一个静态函数(因此可通过任何范围访问(,只需将模型数据传递到返回实例的new self()即可创建实例化对象数组。

这个概念是,您最终会得到一个User_Model实例的数组,每个实例都是属性的数据库列的构建。剩下的就是创建数据库模型和函数来检索列和数据。

class Communications_Model {
    private $_all_users;
    public function getUsers() {
        $this->_all_users = Users_Model::loadAllUsers();
    }
}
class Users_Model {
    private $_example_property;
    public function __construct($user_id) {
        $data = SomeDatabaseModel::getConnection()->loadUserFromDatabase((int)$user_id);
        $this->_example_property = $data['example_column'];
    }
    public static function loadAllUsers() {
        $users = array();
        foreach(SomeDataModel::getConnection()->loadAllUsers() as $data) {
            $users[] = new self($data['user_id']);
        }
        return $users;
    }
}

当然,现在,您有一个 $_all_users; 属性,其中包含包含数据的实例化用户模型数组。

相关内容

最新更新