日期: 2022-09-20 15:25:01 浏览数:5

上往建站提供服务器空间服务商,百度快照排名,网站托管,百度推广运营,致力于设计外包服务与源代码定制开发,360推广,搜狗推广,增加网站的能见度及访问量提升网络营销的效果,主营:网站公司,百度推广公司电话,官网搭建服务,网站服务企业排名,服务器空间,英文域名等业务,专业团队服务,效果好。
新沂400电话办理【新沂网站公司】新沂百度优化、新沂域名注册、新沂网店美工、新沂微信公众号托管
新沂,简称“新”,古称钟吾,地处华北平原南端,江苏省北部,苏、鲁两省交界处,徐州市下辖。北接山东郯城,南隔沂河、骆马湖与宿迁市相望,西和邳州市相邻,东与东海、沭阳毗连,是江苏的正“北大门”,1952年以境内新开辟的新沂河得名,1990年2月撤县建市。 [1]
1万年前石器时代,新沂已有人类活动的踪迹。5000多年前,著名的花厅古文化就在这块美丽富饶的土地上发祥,这里是北方大汶口文化和南方良渚文化交流融汇的重要区域。乾隆皇帝六下江南,多次下榻于此,留下了“第一江山”的赞誉。 [1]
新沂正抓住国家“一带一路”战略、沿东陇海线经济带建设、全面振兴徐州老工业基地、江苏沿海大开发和省委省政府支持苏北新一轮发展等重大战略,成为新亚欧大陆桥的交通枢纽城市、沿东陇海线经济带中心节点城市,新兴的工业和商贸旅游城市。 [1]
2015年3月,国家发改委下发《国家发展改革委办公厅关于开展中小城市综合改革试点工作的通知》,新沂成为国家中小城市综合改革试点地区。2019年3月,被列为第一批革命文物保护利用片区分县名单。 [2] 2019年,新沂位居全国综合实力百强县市第58位、经济竞争力百强第63位、全国投资潜力百强县市第69位、全国绿色发展百强县市第48位、全国科技创新百强县市第71位、全国新型城镇化质量百强县市第53位、全国营商环境百强县第69位。 [3-5] 2020年10月,被评为全国双拥模范城(县)。
<?phpclass Domain_FAQ {
public function retrieveOrderQuestions($scene, $userType, $orderStatus) {
$questionTag = NULL;
// 根据不同的判断,分配合适的问题标签
if ($scene == 'index' && $userType == 'A' && $orderStatus == ORDER_NOT_PAY) {
$questionTag = 'tag_x';
}
if ($scene == 'index' && $userType == 'B' && $orderStatus == ORDER_NOT_PAY) {
$questionTag = 'tag_y';
}
if ($scene == 'list' && ($userType == 'A' || $userType == 'B') && $orderStatus == ORDER_PAID) {
$questionTag = 'tag_z';
}
if ($scene == 'list' && $userType == 'VIP' && $orderStatus == ORDER_PAID) {
$questionTag = 'tag_m';
}
// ... ...
if ($scene == 'detail' && $orderStatus == ORDER_ARRIVED) {
$questionTag = 'tag_n';
}
// 根据问题标签获取相应的问题信息
$questions = $this->getQuestionsBy($questionTag);
return $questions;
}}复制代码上面是经过抽离的代码,即抛开了与我们要讲述的问题无关的代码,并且已适当进行整理。虽然如此,但它本身所表示的业务规则并没有清明地表达出来。此外,过多的判断条件,会导致测试在进行语句覆盖特别是状态覆盖时成本更大,也难以保证映射关系的正确性和完整性。最后,对于像最后在详情页并订单状态为已签收的情况,并没有判断人群类型,当别人在走查代码时不好将其定位为业务需要还是开发遗漏。
既然这里存在着一种映射关系,那么我们可以通过配置一份对照表来进行维护,以最简单的方式突显其业务规则。
<?phpclass Domain_FAQ {
public function retrieveOrderQuestions($scene, $userType, $orderStatus) {
$questionTag = NULL;
$maps = array(
// (页面场景, 用户类型, 订单状态) --> 问题标签
array(array('index', 'A', ORDER_NOT_PAY), 'tag_x'),
array(array('index', 'B', ORDER_NOT_PAY), 'tag_y'),
array(array('list', 'A', ORDER_PAID), 'tag_z'),
array(array('list', 'B', ORDER_PAID), 'tag_z'),
array(array('list', 'VIP', ORDER_PAID), 'tag_m'),
// ... ...
array(array('detail', 'A', ORDER_ARRIVED), 'tag_n'),
array(array('detail', 'B', ORDER_ARRIVED), 'tag_n'),
array(array('detail', 'VIP', ORDER_ARRIVED), 'tag_n'),
);
foreach ($maps as $item) {
list($conditions, $tag) = $item;
if ($scene == $conditions[0] && $userType == $conditions[1] && $orderStatus == $conditions[2]) {
$questionTag = $tag;
break;
}
}
// 根据问题标签获取相应的问题信息
$questions = $this->getQuestionsBy($questionTag);
return $questions;
}}复制代码这一版的代码更加清晰,通过配置,我们指定了根据页面场景,用户类型和订单状态到问题标签之间的映射关系。相信很少人会对这种配置式的开发存在误解或者误用。除非不小心拼错单词或者看错需求说明,但这种低级的错误通常不会在有经验的开发人员身上出现。
可以说,重构到此就可以告一段落了。但对于具有工匠精神,追求更优雅代码的开发工程师来说,上面的代码还存在重构优化的空间。有两个问题,可进一步迭代完善,一个是:对于原来最后只需要一行判断的场景,换成配置后需要三行配置,当自变量维度较多时重复的配置就会越多;另一个是,对于其他类似的业务场景,需要重复实现,从而容易产生重复的代码。
让我们再来回头分析一下,上面这种场景的本质是什么。它更像是一棵决策树,根据配置的映射关系可以构建一棵多叉树。即以某个维度为根节点,以当前维度的可能值作为路径,连接到下一个节点维度,并继续以下个节点的可能值作为路径,依次连接下一个节点,赶到穷举为止。最终连接的节点是对应的因变量,它的值就是最终映射的值。把上面的配置表,转换成对应的多叉树,如下所示。

图4-6 根据配置构建的决策多叉树
注意,上图中,灰色的叶节点表示不存在此路径,为图简化,最终其他无效的叶节点未在图示中画出。并且,最终有效的叶节点中为对应的问题标签值,但全都省略了前缀“tag_”,即最左边的叶节点的值为“x”,实际上完整的标签值为“tag_x”。
这时,对于重复出现和问题,可以考虑采用设计模式来解决。我们可以先设计一个专门处理这样根据自变量寻找因变量的类,并约定使用星号表示通配自变量,例如若对任何用户类型都有效,则可将用户类型配置为“*”。下面是封装了这一实现的新的辅助类——决策类。

新沂400电话办理【新沂网站公司】新沂百度优化、新沂域名注册、新沂网店美工、新沂微信公众号托管
上往建站提供搭建网站,域名注册,官网备案服务,网店详情页设计,企业网店,专业网络店铺管理运营全托管公司咨询电话,服务器空间,微信公众号托管,网页美工排版,致力于域名申请,竞价托管,软文推广,全网营销,提供标准级专业技术保障,了却后顾之忧,主营:虚拟主机,网站推广,百度竞价托管,网站建设,上网建站推广服务,网络公司有哪些等业务,专业团队服务,效果好。
服务热线:400-111-6878 手机微信同号:18118153152(各城市商务人员可上门服务)