代码编程教学入门 代码怎么编写( 二 )

实际工程中,常见的分类维度主要是两种,按功能性或业务域分类 。

  • 功能性分类:metaq、mapper、service、dao等 。
  • 业务域分类:user、item、order、promotion等 。
同一层级的包,要严格保持分类维度的一致性,要么先按业务域分类,再按功能性分类;要么就先按功能性分类,再按业务域分类 。
代码编程教学入门 代码怎么编写


2.2 函数设计原则
有时候,优雅的实现仅仅是一个函数,不是一个类,不是一个框架,只是一个函数 。—— John Carmack
a. 函数要短小、专一
  • 短小:一个函数不超过50行代码,大量的setXXX()除外 。
  • 专一:一个函数只做一件事情,符合单一职责原则 。
b. 函数抽象层次保持一致
遵循金字塔原则,把函数层层递进的调用,理解成结论先行,自上而下的表达过程 。
同层函数是对上一层的支撑,同层间要符合MECE法则,应描述和处理同一逻辑范畴的事情,高层抽象和底层细节不能杂糅在一起,否则会变得凌乱和难以理解 。
MECE是(Mutually Exclusive Collectively Exhaustive)的缩写,指的是“相互独立,完全穷尽”的分类原则 。通过MECE方法对问题进行分类,能做到清晰准确,从而容易找到答案 。
代码编程教学入门 代码怎么编写


2.3 模块分层原则
a. 模块分层
代码编程教学入门 代码怎么编写


  • client:外部可见层(暴露服务声明)
  • service:业务逻辑层,对client层的实现,协调domain和infrastructure一起完成业务逻辑 。
  • domain:领域层,对应DDD中的领域知识 。
  • infrastructure:基础设施层,数据库访问、消息、外部调用等 。
  • start:应用启动层,主要是项目启动时的静态配置 。
b. 模块内包分层
分包的建议:
  • 如果有多个一级域,建议:一级按业务分包,二级按功能分包,三级可按子领域分包 。
  • 如果仅一个一级域,建议:一级按功能分包,二级按子领域分包 。
例如:
代码编程教学入门 代码怎么编写


三、耦合与内聚
软件设计的目标是高内聚、低耦合 。如果代码是高耦合和低内聚的,就会出现修改一个逻辑,多处代码要修改,可能影响到多个业务链路,增加了出bug的业务风险,同时扩大了测试回归的范围,导致研发成本增加 。
耦合和内聚,是我们常挂在嘴边的话,但是大家经常说不太清楚,讲不太明白,很难衡量:
  • 什么样的叫高内聚,什么样的叫低耦合?
  • 高内聚要高到什么程度,低耦合要低到什么程度?
3.1 耦合的类型
代码编程教学入门 代码怎么编写


耦合是描述模块(系统/模块/类/函数)之间相互联系(控制/调用/数据传递)紧密程度的一种度量 。
  • 紧耦合:模块之间联系越紧密,耦合性就越强,模块的独立性则越差 。
  • 松耦合:模块之间联系越松散,单个模块解决问题的目的越明确,模块的独立性越强 。
a. 非直接耦合
代码编程教学入门 代码怎么编写


如果两个模块之间没有直接关系,它们之间的联系完全是通过主模块控制调用来实现的,这就是非直接耦合,这种耦合的模块独立性最强 。
代码编程教学入门 代码怎么编写


b. 数据耦合

推荐阅读