- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
处理乍一看需要许多嵌套 if 语句的复杂业务逻辑的好方法是什么?
例子:
折扣券。可能:
1a) 超值折扣
1b) 百分比折扣
2a) 正常折扣
2b) 累进折扣
3a) 需要访问优惠券
3b) 不需要访问优惠券
4a) 仅适用于之前已经购买的客户
4b) 适用于任何客户
5a) 仅适用于来自国家(X、Y、...)的客户
这需要更复杂的代码:
if (discount.isPercentage) {
if (discount.isNormal) {
if (discount.requiresAccessCoupon) {
} else {
}
} else if (discount.isProgressive) {
if (discount.requiresAccessCoupon) {
} else {
}
}
} else if (discount.isValue) {
if (discount.isNormal) {
if (discount.requiresAccessCoupon) {
} else {
}
} else if (discount.isProgressive) {
if (discount.requiresAccessCoupon) {
} else {
}
}
} else if (discount.isXXX) {
if (discount.isNormal) {
} else if (discount.isProgressive) {
}
}
最佳答案
好问题。 “条件复杂性”是一种代码味道。 Polymorphism是你的 friend 。
Conditional logic is innocent in its infancy, when it’s simple to understand and contained within a few lines of code. Unfortunately, it rarely ages well. You implement several new features and suddenly your conditional logic becomes complicated and expansive. [Joshua Kerevsky: Refactoring to Patterns]
double getPayAmount() {
if (_isDead) return deadAmount();
if (_isSeparated) return separatedAmount();
if (_isRetired) return retiredAmount();
return normalPayAmount();
};
double disabilityAmount() {
if (isNotEligableForDisability()) return 0;
// compute the disability amount
关于refactoring - 如何简化复杂的业务 "IF"逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1607252/
我经常从专业人士的博客中听到一些事情,比如一有机会就重构你的代码。究竟是什么?用更简单和更少的行重写您的代码?这样做的目的是什么? 最佳答案 Refactoring代码是一个清理代码、减少困惑并提高可
我的代码非常困惑,当前的修订版几乎完成了,这意味着我想要的此修订版/冲刺的所有功能都已完成。 我应该按原样完成此修订并稍后重构它还是应该立即重构它? 最佳答案 这个没有“正确”的答案,真的是轻重缓急的
在我的部门,我们目前正在使用 ReSharper 4.0,并决定是否在下周发布时升级到 4.5。我个人是 ReSharper 的忠实粉丝,但我的一些同事指出,他们一直在使用来自 DevExpress
关于 TDD 中的红色、绿色、重构 (RGR) 工作流程的文章建议您在需要时通过编写“有罪的”代码来快速实现绿色(Kent Beck 举例说 TDD 中的“快速绿色为所有罪恶找借口”),然后重构以改进
我正在使用 clojure-maven-plugin。当我执行 cider-connect 时,我收到此消息“警告:clj-refactor 和 refactor-nrepl 不同步。它们的版本分别为
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 4年前关闭。 Improve t
我的开发环境是 Visual Studio 2010,安装了 Resharper 5.1.3000.12 和 AnkhSVN 2.1.10129.17。 我的理解是,当对文件执行 Refactor->
我想使用重构浏览器以编程方式将实例变量添加到现有类: | theClass className | className := #MyClass. theClass := (RBClass existi
你喜欢你的 CRUD 程序吗?代码生成、框架驱动还是手动编写? 最佳答案 我对代码生成器的经验是它们是一个好的开始,但是在更改完成后,我通常想手动重写模块。当然,这可能会成为维护问题。但这真的变成了“
考虑: if (something) { // Code... } 安装 CodeRush 后,建议执行以下操作: if (!something) { return; } // Cod
我想生成一个序列,稍后我可以对其进行(映射)。它应该看起来像这样: ((0 0) (0 1) (0 2) (0 3) ... (7 7)) 为了产生如此简单的结果,我现在必须执行的这段代码看起来非常非
我对编程还是很陌生,我想编写尽可能干净的代码。 这听起来像是一个愚蠢的问题,但我应该按什么顺序排列我的方法?功能上当然没关系,但布局却有很大的不同。假设我们在一个类中有以下代码: -(void)tes
是否有任何实证研究表明重构(或缺乏重构)对开发团队生产力的影响? (注意:我只是在寻找经验数据——根据我自己的经验,我个人知道重构是有效的,但我想知道是否有一些确凿的数据来支持这种说法)。 最佳答案
假设我有一个包含一堆相互依赖的函数的库,这个库太大了,我想把它拆分。有哪些算法可以找到合适的分区? 简单的例子,里面有四个函数:alpha,beta,gamma,delta。 beta 和 gamma
我正在阅读 Fowler 的“重构”,第 1 章。 在第 51 页上,您看到一部附有价格等级的电影。第一种方法是:使用继承来创建多部电影,每部电影都有其独特的 getCharge 方法来计算价格。在第
假设您在某个地方工作,其中对源代码的每次更改都必须与错误报告或功能请求相关联,并且无法对该政策进行改革。在这样的环境中,处理代码重构(即改进代码但不修复错误或添加功能的更改)的最佳方法是什么? 编写错
这个问题在这里已经有了答案: 9年前关闭。 Possible Duplicate: What's the best way to do a bulk namespace rename on a lar
我重构了我和其他人的代码 一直 . 当我在一个分支而不是在 Trunk 中工作时,这有时会导致一些非常痛苦的合并,特别是如果我不定期合并回 Trunk(分支上的代码慢慢地从 Trunc 移开,当人们修
我作为程序员工作的 IT 部门围绕着 30 多年的代码库(Fortran 和 C)。代码状况不佳的部分原因是 30 多年的临时考虑不周的更改,但我也怀疑其中很多与进行更改的程序员的能力有关(顺便说一句
为了能够维护我编写的代码,我必须很好地命名变量,记录我的代码,确保没有重复发生,确保抽象在起作用,从而避免黑客攻击..并谨慎地注释,因为注释经常打断我阅读本书的内容。码。 但是我见过的许多其他代码库更
我是一名优秀的程序员,十分优秀!