`
maimode
  • 浏览: 413182 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

常用开发规范心得

阅读更多

通过一段时间的看程序和修改别人的程序,简单做了一下总结,自己的一点观点,这也是上班后第一次发表到每月技术文章中的文章,现在贴出来,以后自己回头再看时供自己比较一下。

 

1.       避免“串起来”

如果一个功能需要多个步骤按次序完成,那么各个分步骤模块儿之间不要发生调用关系,并且按顺序执行的要求也不要由每个分步骤模块儿自己来决定,要交由宿主方法来组织。

 

示例:

不推荐模式:

推荐模式:

functionA(){

rt = functionB(rt);

    return rt;

}

 

functionB(parameter){

           return functionC(rt);

}

 

functionC(parameter){

    return rt;

}

 

Void main(){

           return functionA();

}

 

functionA(){

           return rt;

}

 

functionB(parameter){

           return rt;

}

 

functionC(parameter){

    return rt;

}

 

Void main(){

a = functionA();

b = functionB(a);

c = functionC(b);

return c;

}

 

执行顺序由各函数决定

执行顺序由宿主方法决定

缺点:模块之间耦合高,不利于代码或宿主方法中功能变动时的维护。

优点:各分步骤模块之间偶尔度降低,执行步骤可灵活统一地在宿主方法中被控制。

 

2遵循“谁创建,谁负责;取用分开”

         如果某个操作需要一些对象作为前提条件,那么尽量把这些对象的创建和业务操作中依赖对象的处理逻辑分开。

 

示例:

典型的数据库操作中会出现这种情况,我们操作数据库表的时候需要先创建一些访问数据库的对象如Connection,然后利用Connection对象去执行我们的sql命令。

我们可以将这个任务划分为几个子任务来处理:

a.创建用于数据库连接的Connection对象;

b.构造sql命令的处理逻辑,调用连接对象执行命令;

c.连接对象的回收;

宿主方法中分别调用这几个模块儿来实现最终的功能。

 

不推荐模式:

推荐模式:

//一个方法完成所有功能

void main(){

Connection conn = null;

…//获取连接对象过程

conn = new Connection();

 

//构造sql并执行、处理结果

Sql = “select * from table”;

ResutlSet rs = Conn.execute(sql);

…//处理结果

 

//连接对象销毁

conn.close();

}

//只处理跟业务操作有关的

Void functionF(Connection conn){

//构造sql并执行、处理结果

Sql = “select * from table”;

ResutlSet rs = Conn.execute(sql);

…//处理结果

 

}

 

//宿主方法组织完成功能

Void main(){

//a.创建数据库连接的Connection对象

conn = new Connection();

 

functionF(conn);//执行

 

//c.连接对象的回收;

…conn回收

}

缺点:连接对象难以统一管理,代码复用性和可移植性不高。

优点:连接对象可以被统一调度管理,减少连接对象只被创建而“忘记”关闭的潜在危险的发生;降低各模块代码的复杂性。

 

 

3. 数据包装、验证或预处理操作应和业务逻辑分开

如果一个模块有输入或输出数据,但是通常情况下又需要对输入和输出的数据进行格式转换,如:输入数据进行base64格式转换,输出数据包装成json串,那么建议尽量保持业务处理中的输入和输出数据是最原始的,而将数据的预处理和格式转换等放在专门的模块中处理。

 

示例:

不推荐模式:

推荐模式:

Void main(p){

p = …p;//格式转换

 

…//关于p的业务逻辑

 

p = …p;//格式转换

 

return p;

}

//公用的转换方法

functionA(p){

rt = …p;//格式转换

return rt;

}

 

Void main(param){

p = functionA(param);

 

…//关于p的业务逻辑

 

rt = functionA(p);

return rt;

}

缺点:如果格式转化逻辑发生变化,代码将难以维护;各业务逻辑部分的代码重复过多,模块复用率低。

优点:能够统一管理数据包转格式;模块复用率提高,代码易于维护。

 

0
1
分享到:
评论

相关推荐

    Java开发计算机毕业实习报告(详细心得)

    培养我们良好编程规范、编程方法;以便能较全面地理解、掌握和综合运用所学的知识,提高自身的编程能力;增强自己的团队协作意识,了解软件开发的思考角度和主要流程。为毕业之后能够更快地进入工作状态并且能够更好...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    Java编程老鸟潜心写作,奉献高效率的Java学习心得 完全站在没有编程经验读者的角度,手把手教会读者学习Java 配16小时多媒体教学视频,高效、直观 一一击破Java入门可能会遇到的难点和疑惑 抽丝剥茧,层层推进,让...

    Visual C# 2005程序设计自学手册 源码--iso文件!!(切记)

    光盘内容:60分钟视频讲解,开发过程录像,编程词典试用版,几十种实用工具,本书实例的源程序,6套完整项目程序,界面词典试用版,软件开发规范和常用开发素材。  读者对象:Visual C#编程初学者,大中专院校的...

    操作系统课程设计——Linux二级文件系统设计

    【开发语言及实现平台或实验环境】 C++/VC++ 【设计要求】 理解Linux的文件系统的组织;掌握常用的数据结构;系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下的文件;使用文件来模拟外存,进行...

    Go语言安全编码规范。

    该规范的目的是为了帮助开发人员避免常见错误,同时通过"实践方法"学习编程语言心得。 输入验证是 Web 应用程序安全性中最重要的部分。如果未对用户输入及相关数据进行验证则会存在安全风险。根据服务器的功能,应...

    Visual+C++程序设计学习笔记

    本书以 Visual C++ 6.0为平台,结合 Visual C++ 6.0和MFC应用程序设计框架的最新规范,从基本的操作和技巧入手,以恰当的实例为导向,对实例代码进行层层图解的方式,由浅入深地介绍了 Visual C++开发的基本理论知识...

    iOS移动端架构初探心得

    对于MVC,MVVM,MVP这三种架构设计模式,相信大家一定了然于心,相关的文章也是多如繁星,对于这些常用架构,每个人都肯定有每个人的理解,但这样会导致一个问题,就是极大的自由度导致了没有代码规范,对于移动端或者前端及...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    Java编程老鸟潜心写作,奉献高效率的Java学习心得 完全站在没有编程经验读者的角度,手把手教会读者学习Java 配16小时多媒体教学视频,高效、直观 一一击破Java入门可能会遇到的难点和疑惑 抽丝剥茧,层层推进,让...

    《数据库开发与设计》课程设计.doc

    其中 优秀:使用多种技术和方法,功能相当完善——满足系统日常工作需要(包括数据的输 入、输出、删除和修改,常用的查询和统计等等),界面整齐紧凑,系统运行流畅;有符 合规范的报告文档,文档叙述条理清楚、文笔...

    单片机液晶屏显示仿手机键盘按键字符.doc

    Proteus 软件提供了一个综合的开发环境,包括 schematic capture、PCB 设计、仿真、编程等功能。其主要特点是:灵活的设计环境、高速的仿真速度、完善的组件库和强大的协作功能。 在本课程设计中,我们使用 Proteus...

    仿通达OA系统ERPASP.NET.rar

    3、系统设计开发的规范性与全面性,利于系统的实现、测试、维护、版本升级等。开发人员既可全面了解OA系统所涉及的业务,也能对本身技术提升有所助益,同时减轻了团队开发压力,节约了开发成本; 4、采用B/S架构...

    图书馆管理系统项目管理分析

    14.3软件开发项目常用进度控制措施 40 15.对项目的风险进行识别、分析和应对 42 15.1 风险的识别 43 15.2 风险的分析 43 15.3 风险的应对 43 16.建立项目的运行管理制度 45 16.1 项目成立 45 16.2工程师项目期间...

    asp.net知识库

    Oracle编程的编码规范及命名规则 Oracle数据库字典介绍 0RACLE的字段类型 事务 CMT DEMO(容器管理事务演示) 事务隔离性的一些基础知识 在组件之间实现事务和异步提交事务(NET2.0) 其它 在.NET访问MySql数据库时的...

    VS2010开发的图形化工作流OA

    常用网址 常用导航资料 系统管理 单位信息管理 管理单位基本信息 部门信息管理 设置部门机构,支持多分公司,集团化应用 用户信息管理 用户信息设置、下属设置、权限设置 角色信息管理 定义权限角色列表,设置角色...

    百度地图开发java源码-JavaPlan:Java学习、进阶、面试、架构师成长之路,Java程序员进阶大牛的核心知识体系

    整理过程中,我也会分享一些近些年自己开发和工作过程中的一些感悟、心得和无奈;总归一句话:养成一颗奋发的平常心。 声明:整理内容大部分来源于网络,如果内容作者认为侵犯了您的权益,请联系邮箱,我会配合处理...

    操作系统课程设计 天津科技大学 二级文件系统设计 答案 完整代码 Liunx

    【开发语言及实现平台或实验环境】 C++/VC++ 【设计目的】 (1)本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现。 (2)结合数据结构、程序设计、计算机原理等课程的知识...

    《UEFI内核导读》-样章20210318.pdf

    全文专注于对UEFI内核的梳理与分享,同时兼顾对X86系统固件生态中常用的工程技术的介绍,主要包含以下内容:UEFI启动流程以及各个阶段主要完成的任务及参考的实现方式导读UEFI及PI规范中的常见Protocol的实现与使用...

    深入理解Android:卷I--详细书签版

     对于Android应用开发工程师而言,本书中关于Binder,以及sp、wp、Handler和Looper等常用类的分析或许能帮助你迅速适应Android平台上的开发工作。  (2)Android系统开发工程师  Android系统开发工程师常常需要...

Global site tag (gtag.js) - Google Analytics