当前位置:首页 > 科技  > 软件

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

来源: 责编: 时间:2023-09-18 21:40:53 469观看
导读一、业务逻辑与代码代码是需求逻辑的一种展现形式:需求文档是业务逻辑的一种展现形式,而代码不过是业务逻辑的另一种表现形式;如果逻辑本身有问题,那么它的各种展示形式自然也是错的,所以写代码前应该先思考清楚业务逻辑。

一、业务逻辑与代码

  • 代码是需求逻辑的一种展现形式:需求文档是业务逻辑的一种展现形式,而代码不过是业务逻辑的另一种表现形式;如果逻辑本身有问题,那么它的各种展示形式自然也是错的,所以写代码前应该先思考清楚业务逻辑。
  • Review代码很多时候是逻辑问题:在Review代码经验中发现:混乱的代码并不仅仅是代码编写技艺问题,很多时候是因为逻辑没有梳理清楚。逻辑混乱,自然代码也混乱。梳理清楚业务逻辑,就为代码打下了良好的基础。当然业务逻辑梳理清楚后,业务逻辑到代码的映射依然有可能出问题,这是编程技艺要解决的问题。下面通过一个简单的例子来演示这个过程:

Hf028资讯网——每日最新资讯28at.com

二、业务需求示例

我们要做一件事情doSomething:Hf028资讯网——每日最新资讯28at.com

  • 第一步先做 A,A 过程要先执行 a1, 然后执行 a2, 然后执行 a3 这三个子过程。
  • 第二步再做 B,B 过程需要执行 b1,然后 b2 这两个子过程。

这个示例逻辑的图形表述如下:是一个树,包含树的根,枝干,和叶子。Hf028资讯网——每日最新资讯28at.com

Hf028资讯网——每日最新资讯28at.com

例子是有通用性的,现实世界的任何事情或业务都可以用类似的树形结构来表述。Hf028资讯网——每日最新资讯28at.com

Hf028资讯网——每日最新资讯28at.com

三、正确的代码实现

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

正确的代码结构应该是和逻辑映射的,代码结构如下:Hf028资讯网——每日最新资讯28at.com

Hf028资讯网——每日最新资讯28at.com

我们真实写代码的时候,一般并不会直接写出如上结构,而是会先写出「3.2 代码块 + 注释」的结构来。Hf028资讯网——每日最新资讯28at.com

2. 代码块 + 合理注释

如下代码通过代码块来映射逻辑,上面图中的子方法对应代码中的注释。Hf028资讯网——每日最新资讯28at.com

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

3. 抽取小方法

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

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

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

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

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

1. 第一种问题:不对等

第一种常见的问题不太严重,只对部分逻辑进行了抽取,造成方法中执行不对等;比如只对 b() 逻辑进行了抽取,但对等的 a()逻辑并未抽取;Hf028资讯网——每日最新资讯28at.com

Hf028资讯网——每日最新资讯28at.com

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

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

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

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

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

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

Hf028资讯网——每日最新资讯28at.com

如下图,只对 a1,a2 进行了抽取,然后名字依然称为 a,看到代码会很疑惑,a3 明显也属于 a。Hf028资讯网——每日最新资讯28at.com

Hf028资讯网——每日最新资讯28at.com

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

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

第三种是最严重的问题,抽取错误,和逻辑不匹配。Hf028资讯网——每日最新资讯28at.com

如下:把 A 的部分逻辑和 B 的部分逻辑一起抽取。Hf028资讯网——每日最新资讯28at.com

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

Hf028资讯网——每日最新资讯28at.com

由此得出结论,先别想着抽取小方法或应用设计模式。先能平铺直叙的写出符合逻辑的代码吧。Hf028资讯网——每日最新资讯28at.com

小方法抽取和设计模式不一定能解决问题,也能隐藏问题。Hf028资讯网——每日最新资讯28at.com

Hf028资讯网——每日最新资讯28at.com

很多难以读懂的代码都是受《重构》和《设计模式》的包装,质量差的代码不可怕,如果再抽取和包装,可以想想是多恐怖。Hf028资讯网——每日最新资讯28at.com

五、补丁和模式思考

(1) 补丁代码思考,代码的腐烂Hf028资讯网——每日最新资讯28at.com

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

(2) 不要急于使用设计模式,写好基础代码Hf028资讯网——每日最新资讯28at.com

写出一个好的基础代码的过程:先梳理清楚逻辑树(树形结构,同层对等),然后做到代码符合逻辑树(代码树自然也符合树形结构,同层的方法对等)。Hf028资讯网——每日最新资讯28at.com

打好基础后,可以再针对基础代码的痛点,应用复杂手段(比如设计模式)来解决,关于方法抽取和方法长度,后续单独文章讨论。Hf028资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-10436-0.html手把手教你,如何先梳理业务逻辑再写代码

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 提升代码效率:掌握Python中并行for循环从入门到精通

下一篇: Java开发必安装插件-Maven Helper

标签:
  • 热门焦点
  • Mate60手机壳曝光 致敬自己的经典设计

    8月3日消息,今天下午博主数码闲聊站带来了华为Mate60的第三方手机壳图,可以让我们在真机发布之前看看这款华为全新旗舰的大致轮廓。从曝光的图片看,Mate 60背后摄像头面积依然
  • 俄罗斯:将审查iPhone等外国公司设备 保数据安全

    iPhone和特斯拉都属于在各自领域领头羊的品牌,推出的产品也也都是数一数二的,但对于一些国家而言,它们的产品可靠性和安全性还是在限制范围内。近日,俄罗斯联邦通信、信息技术
  • 6月安卓手机好评榜:魅族20 Pro蝉联冠军

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年6月1日至6月30日,仅限国内市场。第一名:魅族20 Pro好评率:95%5月份的时候魅族20 Pro就是
  • 5月安卓手机好评榜:魅族20 Pro夺冠

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年5月1日至5月31日,仅限国内市场。第一名:魅族20 Pro好评率:97.50%不得不感慨魅族老品牌还
  • 太卷!Redmi MAX 100英寸电视便宜了:12999元买Redmi史上最大屏

    8月5日消息,从小米商城了解到,Redmi MAX 100英寸巨屏电视日前迎来官方优惠,到手价12999元,比发布价便宜了7000元,在大屏电视市场开卷。据了解,Redmi MAX 100
  • 摸鱼心法第一章——和配置文件说拜拜

    为了能摸鱼我们团队做了容器化,但是带来的问题是服务配置文件很麻烦,然后大家在群里进行了“亲切友好”的沟通图片图片图片图片对比就对比,简单对比下独立配置中心和k8s作为配
  • 三言两语说透设计模式的艺术-单例模式

    写在前面单例模式是一种常用的软件设计模式,它所创建的对象只有一个实例,且该实例易于被外界访问。单例对象由于只有一个实例,所以它可以方便地被系统中的其他对象共享,从而减少
  • 自律,给不了Keep自由!

    来源 | 互联网品牌官作者 | 李大为编排 | 又耳 审核 | 谷晓辉自律能不能给用户自由暂时不好说,但大概率不能给Keep自由。近日,全球最大的在线健身平台Keep正式登陆港交所,努力
  • 质感不错!OPPO K11渲染图曝光:旗舰IMX890传感器首次下放

    一直以来,OPPO K系列机型都保持着较为均衡的产品体验,历来都是2K价位的明星机型,去年推出的OPPO K10和OPPO K10 Pro两款机型凭借各自的出色配置,堪称有
Top