Php 通过依赖项注入将参数传递给_构造
我正在创建一个用户类,它应该是一个实体类。在数据库中,我创建了用户表,它有20个字段 我的问题是:创建一个包含20个参数的“_construct()”好吗?还是我应该使用user setter/getter 我最近读了一些关于依赖注入以及它如何使代码更易于维护的文章,但我对自己的代码感到困惑。 这是我的构造函数:Php 通过依赖项注入将参数传递给_构造,php,constructor,setter,Php,Constructor,Setter,我正在创建一个用户类,它应该是一个实体类。在数据库中,我创建了用户表,它有20个字段 我的问题是:创建一个包含20个参数的“_construct()”好吗?还是我应该使用user setter/getter 我最近读了一些关于依赖注入以及它如何使代码更易于维护的文章,但我对自己的代码感到困惑。 这是我的构造函数: class User{ private $userName; private $userLastName; ...//Other users
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等的复杂性,所有这些都在父类中。
您可以创建一个“联系人”类来存储电子邮件和电话号码等