软件设计原则和编码规范

软件设计原则和编码规范

软件设计

  1. 单一职责原则(Single Responsibility Principle :SRP)

    一个类或者模块只负责完成一个职责(或者功能)。

    何时拆分代码:

    ​ 1. 类中代码行数、属性、函数过多,影响代码可读性和可维护性

    1. 类依赖的其他类过多
    2. 私有方法过多
    3. 难以给类起一个准确的命名
    4. 大量的方法都是集中在某几个属性时
  2. 开闭原则(Open Closed Principle :OCP)

    扩展开放,对修改关闭。

    添加一个新的功能应该是,在已有代码基础上扩展代码(新增模块、类、方法等),而非修改已有代码(修改模块、类、方法等)。

    代码的扩展性是代码质量评判的最重要的标准之一,常用的设计模式几乎都是为了代码的可扩展性服务。我们要时刻具备扩展意识、抽象意识、封装意识。在写代码的时候,我们要多花点时间思考一下,这段代码未来可能有哪些需求变更,如何设计代码结构,事先留好扩展点,以便在未来需求变更的时候,在不改动代码整体结构、做到最小代码改动的情况下,将新的代码灵活地插入到扩展点上。

  3. 里氏替换原则(Liskov Substitution Principle :LSP)

    子类对象(object of subtype/derived class)能够替换程序(program)中父类对象(object of base/parent class)出现的任何地方,并且保证原来程序的逻辑行为(behavior)不变及正确性不被破坏。

  4. 接口隔离原则(Interface Segregation Principle :ISP)

    Clients should not be forced to depend upon interfaces that they do not use.

    客户端不应该被强迫依赖它不需要的接口。

    不同“接口”环境下的解读:

    1. 一组 API 接口集合

      隔离不需要的API——“我”不需要的不要暴露给我

    2. 单个 API 接口或函数

      函数功能需要单一——“我”不需要的功能不要给我

    3. OOP 中的接口概念

      职能划分单一

  5. 依赖反转原则(Dependency Inversion Principle :DIP)

    高层模块(high-level modules)不要依赖低层模块(low-level)。高层模块和低层模块应该通过抽象(abstractions)来互相依赖。除此之外,抽象(abstractions)不要依赖具体实现细节(details),具体实现细节(details)依赖抽象(abstractions)。

    所谓高层模块和低层模块的划分,简单来说就是,在调用链上,调用者属于高层,被调用者属于低层。

  6. KISS(Keep It Short and Simple.)

  7. YAGNI(You Ain’t Gonna Need It)

    适可而止

  8. DRY(Don’t Repeat Yourself )

  9. 迪米特法则(Law of Demeter)

    The Least Knowledge Principle。

    最小知识原则

软件实现与编码规范

命名

  1. 变量命名

    1. 名副其实——变量名应该具有较为明确的意义、语义

    2. 避免误导

      避免留下掩藏代码本意的错误线索。

      例如使用accountList,由于List本身具有特殊含义,如果该容器并非是一个真正的List,那么会引起错误的判断。相较之下使用accounts也许会更好。

    3. 命名可读性

      避免使用拼音简写、肆意的英文简写或拼音+英文混合的命名方法。错误示范:fiveXing——五行、左和右——leftAndYou、数组命名——array、brray

    4. 命名可搜索

      只有以相同的方式得到同样的结果才能称之为信息——注意命名约定

      有意义的命名区分——对于相近的内容,在命名上应当具有有意义的区分。例如,GUI编程中,不建议使用——panel1、panel2等。

  2. 类命名

    类名和对象名应是名词或名词短语——例如,Customer、WikiPage、AddressParser。避免使用——例如,Manager、Processor等过于宽泛的名词。

    类名不应当是动词。

  3. 函数/方法命名

    方法或函数命名应当是动词或动词短语,例如,PostPayment、deletePage。

    访问、修改和断言应当加上getsetis前缀,例如,getName、setAge、isEmpty等。

重构

函数
  1. 函数应当是短小的

    函数过长不利于上下文记忆,同样不利于调试。

    如果某一段代码片段具有一个较为明确的目的,那么应该考虑将其提炼成一个函数

  2. 函数只需要做一件事,只需要做好一件事

  3. 函数中的语句都应该在同一抽象层——自顶向下写代码

  4. 控制函数参数,尽量不超过3个

注释

——注释并不能美化糟糕的代码
原则上应当使用代码进行阐述,不要过度依赖注释,无论是写代码还是读代码。
好的注释应当是具有一定抽象高度的——少写废话、少写显然易得的注释。
注释是代码的一部分,维护代码也需要维护注释

单元测试

单元测试是一小段代码,在特定上下文环境中,单元测试能够执行产品的一部分代码。

测试驱动开发(TDD)三定律:

  1. 在编写不能通过的单元测试前,不可编写生产代码——测试先行
  2. 只可编写刚好无法通过的单元测试——保证测试覆盖率
  3. 只可编写刚好足以通过当前失败测试的生产代码——YAGNI

单元测试的好处:保证代码可扩展、可维护、可复用——无惧修改

单元测试也应具有可读性

单元测试的命名应包含三部分:

  1. 单元测试的前置条件
  2. 被单元测试测试的部分
  3. 单元测试的预期结果

例如:

cacheIsEmpty_addElement_sizeIsOne()

良好的测试应该遵循的规则——快速、独立、可重复、自足验证、(编写)及时。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
数据库设计规范-编码规范 数据库设计规范-编码规范全文共25页,当前为第1页。数据库设计规范-编码规范全文共25页,当前为第1页。数据库编码规范 数据库设计规范-编码规范全文共25页,当前为第1页。 数据库设计规范-编码规范全文共25页,当前为第1页。 1 目的 为了统一公司软件开发设计过程中关于数据库设计时的命名规范和具体工作时的编程规范,便于交流和维护,特制定此规范。 2 范围 本规范适用于全体开发人员,作用于软件项目开发的数据库设计、维护阶段。 3 术语 Ø 数据库对象:在数据库软件开发中,数据库服务器端涉及的对象包括物理结构和逻辑结构的对象。 Ø 物理结构对象:是指设备管理元素,包括数据文件和事务日志文件的名称、大小、目录规划、所在的服务器计算极名称、镜像等,应该有具体的配置规划。一般对数据库服务器物理设备的管理规程,在整个项目/产品的概要设计阶段予以规划。 Ø 逻辑结构对象:是指数据库对象的管理元素,包括数据库名称、表空间、表、字段/域、视图、索引、触发器、存储过程、函数、数据类型、数据库安全性相关的设计、数据库配置有关的设计以及数据库中其他特性处理相关的设计等。 4 设计概要 4.1 设计环境 a) ORACLE 11G R2 数据库 ORACLE 11G R2 操作系统 LINUX 6以上版本,显示图形操作界面 b) MS SQL SERVER 2005 数据库设计规范-编码规范全文共25页,当前为第2页。数据库设计规范-编码规范全文共25页,当前为第2页。数据库 SQL SERVER 2005 企业版 打sp3以上补丁和安全补丁 操作系统 WINDOWS 2008 SERVER 4.2 设计使用工具 a) 使用PowerDesigner 做为数据库的设计工具,要求为主要字段做详尽说明。对于SQL Server 尽量使用企业管理器对数据库进行设计,并且要求对表,字段编写详细的说明(这些将作为扩展属性存入SQL Server中) b) 通过PowerDesigner 定制word格式报表,并导出word文档,作为数据字典保存,格式。(PowerDesigner v10 才具有定制导出word格式报表的功能)。对于SQL Server 一旦在企业管理器进行数据库设计时加入扩展属性,就可以通过编写简单的工具将数据字典导出。 c) 编写数据库建数据库、建数据库对象、初始化数据脚本文件 4.3 设计原则 a) 采用多数据文件 b) 禁止使用过大的数据文件,unix系统不大于2GB,window系统不超过500MB c) oracle数据库中必须将索引建立在索引表空间里。 d) 基本信息表在建立时就分配足够的存储空间,禁止其自动扩展功能 e) 大文本字列、blob列要独立出一张表,此表只有id和blob(或大文本)列 f) 为每一个数据库创建独立的管理员用户,使用该用户进行设计,尽量不要使用sa或者系统管理员身份进行数据库设计。 4.4 设计的更新 a) 在设计阶段,由数据库管理员或指定的项目组其一成员进行维护。 b) 运行阶段,由数据库管理员进行维护。 c) 如对表结构进行修改,应先在数据字典文档进行修改,最后在数据库中进行修改。如果修改的是数据库字典表,必须由数据库管理员进行。 数据库设计规范-编码规范全文共25页,当前为第3页。数据库设计规范-编码规范全文共25页,当前为第3页。d) 编写更新的SQL代码,如果使用PowerDesigner,禁止由PowerDesigner直接连数据库进行数据库操作(如果是更改表或者字段的说明性文字可以通过数据库管理器图形界面进行修改) e) 修改数据库要通过SQL,禁止其它方式对数据进行修改 f) 修改数据库的SQL要添加说明后保存备查 5 命名总体原则 Ø 设定的前缀一律用小写字母 Ø 标识名称命名全部小写 Ø 整个命名的全长不得超过30个字母 Ø 全部使用字母和下划线'_',不能使用中文和其他字符,有特别情况允许使用末尾数字编号。例如:t_Finace1, t_Finace2... Ø 命名名称来自于业务,全部采用英文单词 Ø 英文单词过长可以采用通用的缩写,尽量表达出业务的含义 Ø 如需要两个以上的英文单词做标识名称,单词之间要用下划线'_'连接 Ø 名称全是由名词组成的,名词由大范围到小范围排序取名 Ø 完成某功能的名称,如函数和过程,以动宾形式取名 6 命名规范(逻辑对象) 6.1 数据库结构命名 a) 数据库命名 数据库的命名要求使用与数据库意义相关联的英文字母,即<业务系统名称>。 例如:china care 数据库的命名为ccnet; 客户资料数据库的命名为Customer_Info。 b) 数据库日志设计命名 数据库设计规范-编码规范全文共25页,当前为第4页。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值