实际工程中,常见的分类维度主要是两种,按功能性或业务域分类 。
- 功能性分类:metaq、mapper、service、dao等 。
- 业务域分类:user、item、order、promotion等 。
2.2 函数设计原则
有时候,优雅的实现仅仅是一个函数,不是一个类,不是一个框架,只是一个函数 。—— John Carmacka. 函数要短小、专一
- 短小:一个函数不超过50行代码,大量的setXXX()除外 。
- 专一:一个函数只做一件事情,符合单一职责原则 。
遵循金字塔原则,把函数层层递进的调用,理解成结论先行,自上而下的表达过程 。
同层函数是对上一层的支撑,同层间要符合MECE法则,应描述和处理同一逻辑范畴的事情,高层抽象和底层细节不能杂糅在一起,否则会变得凌乱和难以理解 。
MECE是(Mutually Exclusive Collectively Exhaustive)的缩写,指的是“相互独立,完全穷尽”的分类原则 。通过MECE方法对问题进行分类,能做到清晰准确,从而容易找到答案 。
2.3 模块分层原则
a. 模块分层
- client:外部可见层(暴露服务声明)
- service:业务逻辑层,对client层的实现,协调domain和infrastructure一起完成业务逻辑 。
- domain:领域层,对应DDD中的领域知识 。
- infrastructure:基础设施层,数据库访问、消息、外部调用等 。
- start:应用启动层,主要是项目启动时的静态配置 。
分包的建议:
- 如果有多个一级域,建议:一级按业务分包,二级按功能分包,三级可按子领域分包 。
- 如果仅一个一级域,建议:一级按功能分包,二级按子领域分包 。
三、耦合与内聚
软件设计的目标是高内聚、低耦合 。如果代码是高耦合和低内聚的,就会出现修改一个逻辑,多处代码要修改,可能影响到多个业务链路,增加了出bug的业务风险,同时扩大了测试回归的范围,导致研发成本增加 。
耦合和内聚,是我们常挂在嘴边的话,但是大家经常说不太清楚,讲不太明白,很难衡量:
- 什么样的叫高内聚,什么样的叫低耦合?
- 高内聚要高到什么程度,低耦合要低到什么程度?
耦合是描述模块(系统/模块/类/函数)之间相互联系(控制/调用/数据传递)紧密程度的一种度量 。
- 紧耦合:模块之间联系越紧密,耦合性就越强,模块的独立性则越差 。
- 松耦合:模块之间联系越松散,单个模块解决问题的目的越明确,模块的独立性越强 。
如果两个模块之间没有直接关系,它们之间的联系完全是通过主模块控制调用来实现的,这就是非直接耦合,这种耦合的模块独立性最强 。
b. 数据耦合
推荐阅读
- 车辆识别代码是什么意思
- 音序怎么写在四线格里 音序怎么写
- 2022年各高校专业代码四位数 2022年各高校专业代码
- 诗歌的特征包括 诗歌的特征包括哪四个
- 新课程教学反思中的问题有哪些
- 幼儿园教学经验总结 教师个人教学经验总结
- 罗牛山学校教学质量怎么样
- 月份天数口诀手指视频 月份天数口诀歌
- python编程入门自学 游戏代码大全可复制免费
- 教学过程的本质表现在哪些方面 教学过程的本质属性是