`
renzhelife
  • 浏览: 669921 次
文章分类
社区版块
存档分类
最新评论

“代码三要素”是一个大课题,牵涉的不仅仅是代码质量问题

 
阅读更多

在一定前提下,代码要以容易理解的方式实现。这个课题包括的内容太广,此文仅就近段时间读的一段简单程序为例说明一下似乎与“单入口单出口”原则相关的内容。而谈及这个原则,也可以从不同角度和不同代码形式来谈,此文仅就下面代码模型中的形式而谈。下面代码的背景是有三种unit,每种unit有相同种类的多个documentType;代码实现的是获取每种unit下每种documentType数量。代码如下所示:


上面的程序有很多值得肯定的地方,如它的模块化程度已经很高,后面两个私有方法为前面的find方法做服务,如果将后两个方法内容去不合并到find方法中,那find的复杂程度将大大提高,而维护难度也加大很多(要清楚,这个代码模型中的每个方法中实际上会包含很多逻辑关系的)。如果可以把GOF设计模式,那find和searchAndMapData就相当于是一种外观模式——一种特殊的外观模式——其特殊不仅是体现在方法上提设计模式,也体现在searchAndMapData方法中的隐含性,例如所调用的方法是相同而简单,实际上可能是不同而复杂的。

在编码开始之前一定要好好分析要出来的业务,对业务进行建模分析,认真考虑数据结构。编写程序指做三件事情——输入、处理和输出——而这些无不与数据结构有关,此外对业务的分析最终在代码上体现的也是一个用户输入和展示信息。

按照上面的说法,分析上述代码返回结果的数据结构,是map里有一个list,将每种documentType作为一个map存放到此List中,在结合上述业务场景,则会发现业务上有多少种documentType,List中就会有三倍于这个数字的map。如果我们换个角度想一下,将每种Unit做为一个map,在要返回的信息可以作为DTO放到map中进行返回。当然,我们还可探究此处的数据结构有没有必要这么复杂,但此文不讨论哪种数据结构更好,只是阐述一下在coding前要对业务分析,对数据结构进行设计。

深入到代码细节我们会发现,在类内定义了两个公共变量,主要用于接收要返回的信息。正是这种定义方式加上一种非常规的输入输出的操作导致读这段很简短的代码有些吃力。首先在在find方法中不能很明确的告诉我们返回值从何处获取的。原因是,虽然我们调用了一个获取返回值得处理过程searchAndMapData,但它的职责却绝非是一般意义上的过程,对比函数我们会清楚这个过程其实担当着函数的角色却披着件过程的皮(当然过程在多返回值的处理中等是可以发挥相当作用的,但应该考虑更容易让人理解的方式,此话题是另一个维度的问题,在此不做延展)。另外,还要注意到这两个变量是根本没必要作为公共变量的。姑且将这类问题广义的归结到“单入口,单出口”原则上,不能说这种原则完全正确或有必要,但它也确实为代码的清晰和质量做着贡献。正如百科所言,它是为了保证开发程序的质量,要求过程中的数据流控制是必须在固定的程序段入口进入,固定的出口返回,不允许在编程中随意使用数据。产生这类问题很多原因在于没有对内部逻辑进行真正的规划设计,仅仅是在coding……

上述代码虽看似像是单入口单出口不明确引起的代码不清晰,但其实质及其可挖掘的地方却远不止于此。说复杂了这涉及的是业务分析,设计分析和数据模型分析,说简单了其实就是要认真对待“输入、处理、输出”三要素,而这三要素所涉及的不仅仅是代码的清晰与否问题,更关系到其质量,关系到其韧性,乃至整个业务的完整性!

分享到:
评论

相关推荐

    C#实现不规则图形分割成多个矩形组合可视化工具, 核心是一个找最大内切矩形的算法

    C#代码,不规则图形分割成多个矩形,可视化工具, 核心是一个找最大内切矩形的算法 牵涉到的知识点: 1. 图片的加载和像素解析,绘制到pictureBox上 2.控制pitctureBox缩放(ctrl+滚轮)和移动 3.动态生成bitmap,...

    电子政务规划与标准-电子政务的推进是一个牵涉面比较广的系统工程-电子政务规划与标准在电子政务发展进程.ppt

    电子政务规划与标准-电子政务的推进是一个牵涉面比较广的系统工程-电子政务规划与标准在电子政务发展进程.ppt

    Java web 程序开发体系结构PPT

    我们都想写出完美的代码,但世界上好像从来都没有过完美的代码,因为代码牵涉的内容很复杂,有程序设计语言、运行环境、数据结构以及算法等等,而开发者往往很难全面精通,再者写代码本来也就是一个不断追求完美的...

    Android 图书管理系统 后台系统.rar

     ,这里牵涉一个问题:为什么要重写toString()呢?因为适配器在显示数据的时候,如果传入适配器的对象不是字符串的情况下,直接就使用对象.toString()。  运行界面效果请参见截图所示,需要配置数据库,db.sql是...

    合肥工业大学薛峰老师Java课件 即 所有代码

    这是合肥工业大学薛峰老师的Java课件,其中包含所有牵涉的源代码,学起来很方便

    三驱档案管理系统 v15.07.22.rar

    三驱档案管理系统是使用三驱工作平台构建的一个应用系统,在三驱工作平台的模块设计工具中制作各个功能模块,并组合到三驱工作平台中,在此构建过程中无需编写一行程序。所制作的功能模块包括:档案目前录表、档案...

    “非物质文化遗产”——守艺人.docx

    然而也必须看到,由于我国开展非物质文化遗产保护工作的时间较短,缺乏经验,加上保护遗产工作牵涉面广,情况复杂,运作中也存在不少亟待解决或需要逐步改进的问题。 随着信息时代的到来,我们应该利用现代的网络...

    MFC贪吃蛇游戏源代码

    网络技术和移动终端性能的不断提高与完善,以及手机、电脑的高普及率,使得人们对终端系统应用开发的需求在不端增大,贪吃蛇游戏是受广大人群喜爱的一款的电脑单机游戏,在这个游戏设计中,牵涉到图形界面的显示与更新...

    一个完整的市一级工资管理程序(二)D7

    感谢盒子提供空间上传资料,因为很多程序源代码很短,但开发包很大,只有源代码是没有用的,感谢盒子提供了一个交流的空间。另外:上一篇的开发包里面的控件都是修改过控件里面的错误的,并汉化,并不是原版的,需要...

    对服务器的ftp端口进行修改.docx

     1、完成一个FTP的传输过程不仅仅只需要21一个端口,而是2个端口,21端口只是一个命令端口,其实另外还有一个数据端口,我想这就是有些朋友在内网架设FTP并且在网关上做了21端口的映射之后外网还是不能访问的原因吧...

    C++ vs2005开发的 树控件实例

    一个用vs2005开发的应用程序【源代码】,其中后台用了一个二叉树,前台是一个CTreeCtrl 由于现实,还牵涉到文件的读取【读取到CTreeCtrl 里面】,还有节点的删除,插入等等,【其中每个节点有2个字段用“|”分开,第...

    【精品】地铁轨道交通工程BIM实践与规划(112页+图文并茂).ppt

    任何一个轨道交通工程项目,所牵涉的设计人员无论在专业上和人数上都是众多的,这就需要三维协同解决方案要具有良好的可操作性、易学易用,而且在成本上也能够大量配置。同时,易学易用的特性也是实现快速部署,并在...

    在RAM中执行程序代码

    这是一个比较复杂的程序,其中还牵涉到了C51中嵌入汇编的用法。对大多数初学者来说,只要了解其工作过程即可,不必深究。如果您确实对其感兴趣,请自行仔细研究。 该引导程序位于片内Flash中,其作用是通过串行口...

    深圳地铁弓网系统视频监控系统测试设备安装方案(1).doc

    任何一个轨道交通工程项目,所牵涉的设计人员无论在专业上和人数上都是众多的,这就需要三维协同解决方案要具有良好的可操作性、易学易用,而且在成本上也能够大量配置。同时,易学易用的特性也是实现快速部署,并在...

    基于Revit的轨道交通建模解决方案-省建院V1.0.pdf

    任何一个轨道交通工程项目,所牵涉的设计人员无论在专业上和人数上都是众多的,这就需要三维协同解决方案要具有良好的可操作性、易学易用,而且在成本上也能够大量配置。同时,易学易用的特性也是实现快速部署,并在...

    深圳地铁弓网系统视频监控系统测试设备安装方案.doc

    任何一个轨道交通工程项目,所牵涉的设计人员无论在专业上和人数上都是众多的,这就需要三维协同解决方案要具有良好的可操作性、易学易用,而且在成本上也能够大量配置。同时,易学易用的特性也是实现快速部署,并在...

    上海地铁站BIM技术应用.ppt

    任何一个轨道交通工程项目,所牵涉的设计人员无论在专业上和人数上都是众多的,这就需要三维协同解决方案要具有良好的可操作性、易学易用,而且在成本上也能够大量配置。同时,易学易用的特性也是实现快速部署,并在...

    城市轨道交通调研报告2019.zip

    任何一个轨道交通工程项目,所牵涉的设计人员无论在专业上和人数上都是众多的,这就需要三维协同解决方案要具有良好的可操作性、易学易用,而且在成本上也能够大量配置。同时,易学易用的特性也是实现快速部署,并在...

    中铁二院轨道交通BIM方案建议书.docx

    任何一个轨道交通工程项目,所牵涉的设计人员无论在专业上和人数上都是众多的,这就需要三维协同解决方案要具有良好的可操作性、易学易用,而且在成本上也能够大量配置。同时,易学易用的特性也是实现快速部署,并在...

    徐正良-有轨电车规划设计经验与教训-11.13.pdf

    任何一个轨道交通工程项目,所牵涉的设计人员无论在专业上和人数上都是众多的,这就需要三维协同解决方案要具有良好的可操作性、易学易用,而且在成本上也能够大量配置。同时,易学易用的特性也是实现快速部署,并在...

Global site tag (gtag.js) - Google Analytics