文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

手把手教你,如何先梳理业务逻辑再写代码

2024-11-30 08:02

关注

二、业务需求示例

我们要做一件事情doSomething:

这个示例逻辑的图形表述如下:是一个树,包含树的根,枝干,和叶子。

例子是有通用性的,现实世界的任何事情或业务都可以用类似的树形结构来表述。

三、正确的代码实现

1. 和逻辑树映射的代码树

正确的代码结构应该是和逻辑映射的,代码结构如下:

我们真实写代码的时候,一般并不会直接写出如上结构,而是会先写出「3.2 代码块 + 注释」的结构来。

2. 代码块 + 合理注释

如下代码通过代码块来映射逻辑,上面图中的子方法对应代码中的注释。

void doSomething(){
    //A
    a1逻辑伪代码.....;//a1
    a2逻辑伪代码.....;//a2
    a3逻辑伪代码.....;//a3

    //B
    b1逻辑伪代码;//b1
    b2逻辑伪代码;//b2
}

3. 抽取小方法

可以再上面的基础上更优秀些,对代码块进行抽取小方法,更符合业务描述(更符合业务的树形结构)。推荐阅读:看看人家 SpringBoot + vue后台管理系统,多么优雅...

void doSomething(){
    doA();
    doB();
}

void doA(){
    a1逻辑伪代码.....;
    a2逻辑伪代码.....;
    a3逻辑伪代码.....;
}
void doB(){
    b1逻辑伪代码;
    b2逻辑伪代码;
}

当然你也可以继续对 a1,a2,a3,b1,b2 等小逻辑映射为小方法,以上提到几种写法都是正确的,关于小方法是否抽取,后续单独在《代码长度与母语的关系》中讨论。下面我们来看看不正确的写法。

四、不正确的代码实现 ===========

当你看到下面的不正确的写法的时候,你也许会觉得不可思议,真的会写出这样的代码?现实是:项目中我见到很多更糟糕的代码,会把下面提到的问题,以及其他编程技艺的问题排列组合出现。

1. 第一种问题:不对等

第一种常见的问题不太严重,只对部分逻辑进行了抽取,造成方法中执行不对等;比如只对 b() 逻辑进行了抽取,但对等的 a()逻辑并未抽取;

void doSomething(){
   a1逻辑伪代码.....;
   a2逻辑伪代码.....;
   a3逻辑伪代码.....;
   doB();
}

void doB(){
   b1逻辑伪代码;
   b2逻辑伪代码;
}

改进办法参考上面第 3 部分正确的写法,至少可以在doB();之前加空行,并对 a1,a2,a3 加个注释,也会易读很多(当然这是一种妥协写法)。

void doSomething(){
		//a逻辑
    a1逻辑伪代码.....;
    a2逻辑伪代码.....;
    a3逻辑伪代码.....;
    
    //b逻辑
    doB();
}

void doB(){
    b1逻辑伪代码;
    b2逻辑伪代码;
}

2. 第二种问题:部分抽取

第二种是对整体的部分逻辑进行了抽取,这种方法很难命名,会给个词不达意的名字,或使用整体的名字,这个就相对严重了,已经影响到了代码阅读和理解。

比如电脑是一个整体,可以命名是电脑;如果只给你一部分(CPU,主板,显卡)怎么命名让人能明白?电脑部分零件?但电脑部分零件并不能让人明白,因为它不是一个逻辑主体。CPU 是一个逻辑主体,封装了运算。

如下图,只对 a1,a2 进行了抽取,然后名字依然称为 a,看到代码会很疑惑,a3 明显也属于 a。

void doSomething(){
    doA();
    a3逻辑伪代码.....;
    doB();
}
void doA(){
    a1逻辑伪代码.....;
    a2逻辑伪代码.....;
}

void doB(){
    b1逻辑伪代码;
    b2逻辑伪代码;
}

3. 第三种问题:抽取错误

第三种是最严重的问题,抽取错误,和逻辑不匹配。

如下:把 A 的部分逻辑和 B 的部分逻辑一起抽取。

如果在这个基础上再对抽取的部分起个晦涩的名字(其实这种抽取也起不到好名字),然后应用一些设计模式来把代码更分散(缺点隐藏起来),就成功的完成了只有自己可以看懂的代码(可能表面看起来还很高大上)。

由此得出结论,先别想着抽取小方法或应用设计模式。先能平铺直叙的写出符合逻辑的代码吧。

小方法抽取和设计模式不一定能解决问题,也能隐藏问题。

很多难以读懂的代码都是受《重构》和《设计模式》的包装,质量差的代码不可怕,如果再抽取和包装,可以想想是多恐怖。

五、补丁和模式思考

(1) 补丁代码思考,代码的腐烂

很多人看到这里,会觉得自己绝对不会写出这么烂的代码;确实一开始也许不会,但伴随新需求,不同人不断打补丁(为了不影响线上,老代码不让动),最后就会演进未这几个问题综合展现的代码。阅读这样的代码不看到最底层代码,根本不知道代码在做什么,因为方法名已经不可信。

(2) 不要急于使用设计模式,写好基础代码

写出一个好的基础代码的过程:先梳理清楚逻辑树(树形结构,同层对等),然后做到代码符合逻辑树(代码树自然也符合树形结构,同层的方法对等)。

打好基础后,可以再针对基础代码的痛点,应用复杂手段(比如设计模式)来解决,关于方法抽取和方法长度,后续单独文章讨论。

来源:技术老男孩内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯