【问题标题】:Making classes focus on doing one thing - practically让课堂专注于做一件事——实际上
【发布时间】:2014-06-02 06:08:06
【问题描述】:

这又是一个概念性问题(参见上一篇文章Is there a difference between Object and Models in PHP/CodeIgniter?

这是 PHP 上的 CodeIgniter(一个 MVC 框架)。

我正在尝试找出实现这个示例的最佳(= 实用且合理的原则)方法。

在我的示例中,在数据库模式中,由于我在 codeigniter 上使用 tank_auth,因此已自动为我创建了一个名为“users”的表(通过 tank_auth)。所以这个用户表代表了我的所有用户在我的图书借阅图书馆应用程序中的任何角色。

一个人可以同时担任多个角色(贷方、作者、图书管理员、经理等)。我最初开始认为我应该有一个“people_model”(作为 MVC 中的 M),但现在我想知道这样做是否更好:

应该有一个“贷方”模型和一个“作者”模型和一个“图书馆员”模型等。我很难解释为什么它有意义,但这可能是因为 OOP 原则“让课程成为焦点”做一件事(单一职责)”。

那么这个例子就是那个原则所指的吗?我的“图书管理员”类(模型)应该只有图书管理员功能。任何更多的东西都只是离得太远了一步,一般来说,拥有一个“人”类来完成“真人”会做的所有事情太抽象了?......我在正确的轨道上吗?我将不得不做一些重新设计......但这就是学习曲线。

【问题讨论】:

    标签: php codeigniter oop


    【解决方案1】:

    这实际上取决于您的用户做什么,以及他们的角色有多么不同。很可能所有用户的共同点多于使他们与众不同的点。

    您可能应该从处理基本用户功能的单一模型开始。如果您需要为不同的用户进行大量特定的数据库调用,那么您可以构建额外的用户类型特定模型。但是我不会从那开始,因为它几乎肯定是必须编写和维护更多代码(并且可能是一些重复代码)而不是更少的途径。

    【讨论】:

    • 我是否正确理解了您的建议或方法?从一个涵盖所有需要的数据库调用/函数的单个“人”类开始,即使它们是唯一的。如果它们增长很多,那么考虑将它们分解成自己的模型。所以它可能会发生这种情况我有一个“图书馆员”模型和一个“经理”模型,它们有自己独特的功能/调用,但同时在这个初始调用像“loan_book()”这样的常用函数"people" 类,它仍然与 all 人(即用户)相关。听起来很合理。
    • 是的,可能有很多东西在用户之间共享,如果你从为每个用户创建一个独特模型的心态开始,你最终可能会写重复代码。
    • 谢谢丹,太好了。
    猜你喜欢
    • 2019-01-14
    • 1970-01-01
    • 2015-03-21
    • 2022-11-22
    • 2010-12-31
    • 2020-08-30
    • 1970-01-01
    • 2016-08-02
    • 2016-01-09
    相关资源
    最近更新 更多