首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >环境决策

环境决策
EN

Software Engineering用户
提问于 2022-03-08 14:55:13
回答 2查看 138关注 0票数 0

我试图说服其他人,下面的第一个代码片段是错误的实践,第二个代码片段是最佳实践。

不良做法:

代码语言:javascript
复制
// 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);
}

最佳做法:

代码语言:javascript
复制
// 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);
}

我需要我的论文后面的推荐信。你知道什么吗?是否有特定的关键字引用此编程情况?比如“实现配置不可知论”之类的。

EN

回答 2

Software Engineering用户

回答已采纳

发布于 2022-03-08 15:24:34

看起来,您提议的重构从您说的不好的实践转变为您所说的好的是Fowler所称的用多态替换条件

它是否是一种改进取决于上下文,但这应该足以帮助您找到更多的讨论。

票数 5
EN

Software Engineering用户

发布于 2022-03-08 16:13:04

这里的一个关键问题是何时知道dryMode。如果只在适配器构建之后才知道,多态解决方案将无法工作。

多态解决方案允许您稍后添加更多的情况,而无需更改现有的、经过测试的、部署的代码。你必须扪心自问,这些案件是否可能是需要的。布尔人几乎没有什么价值,所以不要真的表示有很多情况是预料到的。

多态解决方案不是免费的。它需要更多的代码,更多的时间来创建,更多的时间去阅读和理解。是的,这里有惊人的灵活性。但这是要付出代价的。一定要值得。

有许多布尔开关"liveMode“、"dryMode”、"devOnly“、- 丹尼尔W.

这并不令人鼓舞。

当一个属性可以接受多个状态时,多态解决方案工作得最好。当许多属性独立打开或关闭时,情况就不一样了。我的意思是,你可以让它发挥作用,但是,恶心。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/437221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档