Oop 对象构造函数除了分配其依赖项之外,还有什么错呢?
我遇到了一些文本,其中讲述了一些好的实践“在构造函数中什么都不做,只分配属性..”,随后是重构代码前后的内容。说实话,我一直在遵循这一做法,但我想知道和理解一些更好的例子,如果不遵守这一准则,事情可能会出错 重构前:Oop 对象构造函数除了分配其依赖项之外,还有什么错呢?,oop,dependency-injection,language-agnostic,coding-style,Oop,Dependency Injection,Language Agnostic,Coding Style,我遇到了一些文本,其中讲述了一些好的实践“在构造函数中什么都不做,只分配属性..”,随后是重构代码前后的内容。说实话,我一直在遵循这一做法,但我想知道和理解一些更好的例子,如果不遵守这一准则,事情可能会出错 重构前: final class MySQLTableGateway { private Connection connection; public function __construct( ConnectionConfiguration connectio
final class MySQLTableGateway
{
private Connection connection;
public function __construct(
ConnectionConfiguration connectionConfiguration,
string tableName
) {
this.tableName = tableName;
this.connect(connectionConfiguration);
}
private function connect(
ConnectionConfiguration connectionConfiguration
): void {
this.connection = new Connection(
// ...
);
}
public function insert(array data): void
{
this.connection.insert(this.tableName, data);
}
}
重构版本
final class MySQLTableGateway
{
private ConnectionConfiguration connectionConfiguration;
public function __construct(
ConnectionConfiguration connectionConfiguration,
string tableName
) {
this.connectionConfiguration = connectionConfiguration;
this.tableName = tableName;
}
private function connect(
ConnectionConfiguration connectionConfiguration
): void {
if (this.connection instanceof Connection) {
return;
}
this.connection = new Connection(
// ...
);
}
public function insert(array data): void
{
this.connect();
this.connection.insert(this.tableName, data);
}
}
你从哪里读到这个指南的?他们没有解释原因吗?@RWRkeSBZ没有,他们没有解释-因此问题就来了。因此,他们基本上提出了一个未经证实的主张:-)不管怎样,我避免在构造函数中做太多的事情的原因是为了让我的对象尽快进入稳定状态,而不会发生异常的风险。如果您的构造函数只是一个长长的构造链中的一个,那么异常可能会使事情复杂化。因此,指导原则是尽快创建对象,并尽可能减少发生异常的风险。您从何处阅读此指导原则?他们没有解释原因吗?@RWRkeSBZ没有,他们没有解释-因此问题就来了。因此,他们基本上提出了一个未经证实的主张:-)不管怎样,我避免在构造函数中做太多的事情的原因是为了让我的对象尽快进入稳定状态,而不会发生异常的风险。如果您的构造函数只是一个长长的构造链中的一个,那么异常可能会使事情复杂化。因此,指导原则是尽可能快地创建对象,并且尽可能少地发生异常的风险。