我的模特看起来都一样

bir*_*ric 5 php oop refactoring codeigniter

我注意到我的所有模型看起来非常相似.他们中的大多数倾向于遵循一种模式,在这种模式中,它们是包含活动记录代码的方法集合,这些代码只是彼此之间的微小变化 这是一个例子:

class Site extends CI_Model {

    public function get_site_by_id($id)
    {
        // Active record code to get site by id
    }

    public function get_sites_by_user_id($user_id)
    {
        // ...
    }

    // ...

    public function get_site_by_user_id_and_url_string($user_id, $url_string)
    {
        // ...
    }

    // Non active record methods and business logic
    // ...

}
Run Code Online (Sandbox Code Playgroud)

这种方法对我来说很好,但我想知道是否有更优雅的解决方案.我似乎不应该每次需要以新的方式查找数据时创建一个新方法.这是常见做法还是我错过了重构这种方法的方法?

Mr *_*bia 2

严格按照您的要求,您可以在主模型类(CI_Model)和您的类(Site)之间添加一个中间类,例如

class MyCommonMethodsClass extends CI_Model {
}
Run Code Online (Sandbox Code Playgroud)

您可以在您的类(站点)中扩展它,同时将通用代码放在上面。那会起作用并且可能在某种程度上是“优雅的”。事实上,最后您将添加基本的crud、适应站点的操作。

现在,如果那是“干净的”,那就是另一回事了。严格来说,该模型确实做到了这一点。它负责普通和“高级”吸气剂。是的,他们几乎总是倾向于在您的网站上使用相同的代码。问题是,尽管这在您的代码中看起来不错(代码较少),但您在技术上牺牲了业务逻辑和数据库之间的抽象。您是模型纯粹主义者还是实用主义者?