Inhaltsverzeichnis
关于分支过多的情况处理???
Jun 06, 2016 pm 08:19 PM
php
设计模式
关于条件分支过多的情况,有什么好的、比较通用的解决方案?下面这个例子来说明一下情况
<code>//购物车中的一个商品 $data = []; //判断是否上架 if() { //判断库存是否足够 if() { //判断是否有优惠活动 if() { //有优惠活动 if() { if() { //计算活动库存是否足够 } else { //不够活动库存 } } else { //不写了,这么多分支,足够说明情况了 } } else { //无优惠活动 if() { //vip计算, if() { //金卡-100 } else if() { //银卡-200 } else { //普卡-50 } } else { //普通会员,按商品原价计算 } } } }</code>
Nach dem Login kopieren
Nach dem Login kopieren
回复内容:
关于条件分支过多的情况,有什么好的、比较通用的解决方案?下面这个例子来说明一下情况
<code>//购物车中的一个商品 $data = []; //判断是否上架 if() { //判断库存是否足够 if() { //判断是否有优惠活动 if() { //有优惠活动 if() { if() { //计算活动库存是否足够 } else { //不够活动库存 } } else { //不写了,这么多分支,足够说明情况了 } } else { //无优惠活动 if() { //vip计算, if() { //金卡-100 } else if() { //银卡-200 } else { //普卡-50 } } else { //普通会员,按商品原价计算 } } } }</code>
Nach dem Login kopieren
Nach dem Login kopieren
早返回:把否定的/能返回的分支提前
例子
//BAD: //判断是否上架 if() { //判断库存是否足够 if() { xxx } } //GOOD: if(!上架) { return 报错(没上架!); } if(!库存足够) { return 报错(没库存!); } xxx
Nach dem Login kopieren
抽取方法
<code>//BAD: //判断是否有优惠活动 if() { //有优惠活动 if() { if() { //计算活动库存是否足够 } else { //不够活动库存 } } else { //不写了,这么多分支,足够说明情况了 } } //GOOD price = 计算优惠(user, item) function 计算优惠(user, item) { if(优惠 = 获取优惠(user, item)) { return 优惠.计算价格(item.price); } if(VIP = 获取VIP会员(user)) { return VIP.打折(item) } return item.price; }</code>
Nach dem Login kopieren
职责链
就说电商活动的场景,优惠叠加/互斥,积分啊什么的需求可能复杂到抽方法也理不清楚,这时候可能就要把结构再理清楚一点
每种改变价格/增减积分的方法都实现成职责链的一环串起来就好,每一环都有权限执行自己的逻辑,对价格进行修改,跳过其他环节等等
1.使用卫术句,提前return。
2.使用数组或字典,避免分支
3.使用设计模式
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heißer Artikel
Repo: Wie man Teamkollegen wiederbelebt
3 Wochen vor
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Wochen vor
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor
By 尊渡假赌尊渡假赌尊渡假赌
Wie lange dauert es, um Split Fiction zu schlagen?
3 Wochen vor
By DDD

Hot-Tools-Tags

Heißer Artikel
Repo: Wie man Teamkollegen wiederbelebt
3 Wochen vor
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Wochen vor
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor
By 尊渡假赌尊渡假赌尊渡假赌
Wie lange dauert es, um Split Fiction zu schlagen?
3 Wochen vor
By DDD

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein
