Php 通过依赖项注入将参数传递给_构造

Php 通过依赖项注入将参数传递给_构造,php,constructor,setter,Php,Constructor,Setter,我正在创建一个用户类,它应该是一个实体类。在数据库中,我创建了用户表,它有20个字段 我的问题是:创建一个包含20个参数的“_construct()”好吗?还是我应该使用user setter/getter 我最近读了一些关于依赖注入以及它如何使代码更易于维护的文章,但我对自己的代码感到困惑。 这是我的构造函数: class User{ private $userName; private $userLastName; ...//Other users

我正在创建一个用户类,它应该是一个实体类。在数据库中,我创建了用户表,它有20个字段

我的问题是:创建一个包含20个参数的“_construct()”好吗?还是我应该使用user setter/getter

我最近读了一些关于依赖注入以及它如何使代码更易于维护的文章,但我对自己的代码感到困惑。 这是我的构造函数:

class User{ 
    private     $userName;
    private     $userLastName;
    ...//Other users fields

    public function __construct($name,$lastname,$phone,...){
           $this->userName = $name;
           $this->userLastName = $lastname;
           ...
    }

}
我正在寻找编写可读、干净和可维护代码的最佳实践


关于

最好使用getter和setter。具有20个参数的_构造方法非常庞大。如果没有getter,您希望如何访问您的私有用户属性?

这与依赖注入无关。在这里,您不会注入依赖项,而只是值

所以真正的问题是:您应该在构造函数中获取这些值,还是通过getter/setter获取这些值

我认为使用构造函数是一件好事,因为它可以防止模型处于无效状态。例如,如果您的用户需要一封电子邮件,那么通过将其放入构造函数,您可以保证所有用户都会收到电子邮件


因此,我建议您将需要定义的所有属性(非null)放入构造函数中,并对所有其他属性使用setter(这将有助于避免使用20个参数的构造函数).

如果您的类有20个参数,那么您的类很有可能会违反规则,并在没有正确授权、组合功能的情况下形成某种单一类

确保类具有低耦合性和高内聚性

因为我们没有在这里进行完整的代码审查(改为转到)

我怀疑您正在传递诸如国家、邮政编码、电话号码等所有参数。 问问自己构造有效对象绝对需要哪些数据

如果类
Person
需要名为
Name
的属性,那么使用
Name
的setter而不是ctor参数可以创建不完整的类。这将维护一致性的负担转移到了每个方法上,因为您无法确定是否已设置了
Name
。这样的代码很糟糕,通常会携带一些“已初始化”标志或函数,并用检查将代码弄得杂乱无章

您的ctor应该包含最小的参数集。其他一切都可以通过属性或进一步组合来完成,例如
Address
类消除了传递zip、state、street等的复杂性,所有这些都在父类中。 您可以创建一个“联系人”类来存储电子邮件和电话号码等