我试图说服其他人,下面的第一个代码片段是错误的实践,第二个代码片段是最佳实践。
不良做法:
// There is only one implementation of Adapter
public function setAdapter(Adapter $adapter)
{
$this->adapter = $adapter;
}
public function persist(Entity $entity): void
{
if ($this->env->dryMode === true) {
return;
}
$this->adapter->persist($entity);
}最佳做法:
// Can inject different adapters, also something like a `DryModeDbAdapter`,
// that simply does nothing when `persist` is called.
public function setAdapter(AdapterInterface $adapter)
{
$this->adapter = $adapter;
}
public function persist(Entity $entity): void
{
$this->adapter->persist($entity);
}我需要我的论文后面的推荐信。你知道什么吗?是否有特定的关键字引用此编程情况?比如“实现配置不可知论”之类的。
发布于 2022-03-08 15:24:34
看起来,您提议的重构从您说的不好的实践转变为您所说的好的是Fowler所称的用多态替换条件。
它是否是一种改进取决于上下文,但这应该足以帮助您找到更多的讨论。
发布于 2022-03-08 16:13:04
这里的一个关键问题是何时知道dryMode。如果只在适配器构建之后才知道,多态解决方案将无法工作。
多态解决方案允许您稍后添加更多的情况,而无需更改现有的、经过测试的、部署的代码。你必须扪心自问,这些案件是否可能是需要的。布尔人几乎没有什么价值,所以不要真的表示有很多情况是预料到的。
多态解决方案不是免费的。它需要更多的代码,更多的时间来创建,更多的时间去阅读和理解。是的,这里有惊人的灵活性。但这是要付出代价的。一定要值得。
有许多布尔开关"liveMode“、"dryMode”、"devOnly“、- 丹尼尔W.。
这并不令人鼓舞。
当一个属性可以接受多个状态时,多态解决方案工作得最好。当许多属性独立打开或关闭时,情况就不一样了。我的意思是,你可以让它发挥作用,但是,恶心。
https://softwareengineering.stackexchange.com/questions/437221
复制相似问题