sit*_*lge 5 php oop constructor design-patterns class
内部有逻辑是一个好主意__constructor吗?
public class someClass
{
public function __construct()
{
//some logic here
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我认为还可以。但是,此reddit评论表明相反。
正如 @Barry所写,原因之一与单元测试有关,但这只是副作用。
让我们考虑最坏的情况:你有一个“类”,它只有一个构造函数(你可能已经见过这样的例子)。那么......为什么它甚至被写成一个类呢?您无法更改它的状态,您无法请求它执行任何任务,并且您无法检查它是否执行了您想要的操作。您也可以使用线性文件并将其包含在内。这实在是太糟糕了。
现在举一个更合理的例子:假设您有一个类,它在构造函数中进行一些验证检查,并在其中创建一个新的数据库连接。然后它还有一些用于执行各种任务的公共方法
最明显的问题是“建立新的数据库连接” - 没有办法从类外部影响或阻止此操作。新的连接将会执行谁知道会发生什么(可能会加载一些配置并尝试抛出异常)。它还构成了一个隐藏的依赖关系,如果不检查类的代码,您就没有任何指示。
代码也存在类似的问题,即对传递的参数进行验证和/或转换。它构成了隐藏逻辑(因此违反了PoLA。它还使您的类更难以扩展,因为您可能希望保留一些验证功能,同时替换其他部分。而您没有这个选择。因为所有这些每当您创建新实例时,代码就会运行。
底线是——构造函数中的逻辑被认为是“代码味道”。这不是致命的罪过(就像eval()在全局变量上使用一样),但它是糟糕设计的标志。
| 归档时间: |
|
| 查看次数: |
934 次 |
| 最近记录: |