Php 设计模式-仅构造函数中的独立类差异

Php 设计模式-仅构造函数中的独立类差异,php,design-patterns,object-oriented-analysis,Php,Design Patterns,Object Oriented Analysis,向设计模式迷们提出的问题,因为我们在这个问题上的团队争论已经超过了我们应该讨论的时间 因此,我们使用一个框架,Yii2,为数据库表创建默认模型。在一个示例中,表t\u receipt\u settings具有模型TReceiptSettings。因为我们有一些默认设置,所以携带这些默认设置的一种方法是创建另一个类DefaultReceiptSettings,该类仅使用不同的构造函数扩展TReceiptSettings。例如: class DefaultReceiptSettings extend

向设计模式迷们提出的问题,因为我们在这个问题上的团队争论已经超过了我们应该讨论的时间

因此,我们使用一个框架,
Yii2
,为数据库表创建默认模型。在一个示例中,表
t\u receipt\u settings
具有模型
TReceiptSettings
。因为我们有一些默认设置,所以携带这些默认设置的一种方法是创建另一个类
DefaultReceiptSettings
,该类仅使用不同的构造函数扩展
TReceiptSettings
。例如:

class DefaultReceiptSettings extends TReceiptSettings
{
    public function __construct($config = array()) {
        $this->print_website_address = 1;
        $this->print_email_address = 1;
        $this->print_phone_no = 1;
        $this->print_cash_reg_name = 1;
        parent::__construct($config);
    }

}
现在,该方法收集的评审为:

  • 这是错误的。您应该在
    TReceiptSettings
    中创建一个静态方法,为您设置默认值。或
  • 这是正确的做法。创建一个具有初始默认值的新类实际上是有利的。在代码的其他地方有新的
    DefaultReceiptSettings()
    比备选方案要好得多

  • 这是一个好的解决方案吗?可接受的解决方案?还是一个错误的解决方案?为什么?

    假设您已经使用Gii生成了模型,那么扩展它们几乎总是更好的,因为表示数据库表的类会随着表结构的变化而变化。如果您直接处理基类,那么将无法使用Gii生成任何更改。因此,在我的经验中,2是正确的方法。对于同一基础实体,使用多个模型感觉是错误的。这不一定是一个面向对象的问题,更多的是一个ORM问题。这些设置包括什么?只是一些字段的默认值,或者?@BrettGregson-ohh-okk。好主意。但实际上,如果我们遵循你的方法,我会说方法2将涉及到3个模型。一个用于数据库,一个用于扩展数据库,我们将使用例如ReceiptSettings和第三个DefaultReceiptSettings。“你觉得这种方法怎么样?”MartinDimitrov说得没错。我们为每个新客户机创建了一个默认设置对象,如果他没有添加任何对象。因此,根据团队中的一些人的说法,存储这些设置的最佳位置是为它们创建一个单独的模型,而不是将它们留在代码中