一般来说一个好的模块设计(如何编写一个好的模块)

2023-03-06 12:50:00 来源 : haohaofanwen.com 投稿人 : admin

下面是好好范文网小编收集整理的一般来说一个好的模块设计(如何编写一个好的模块),仅供参考,欢迎大家阅读!

一般来说一个好的模块设计

【模块定义和定位】

模块的功能需要有清晰明确的定义。

接口定义。一个模块对外提供的方法集合就是模块的定义。包括

方法定义。注意方法的完备性,比如数据库有增删改查,用户操作有注册登录退出。缺少了某个方法,功能将不完备。

常量定义。比如状态,类型等等。

异常定义。异常的继承关系,异常代码,异常消息等等。

定位模块在系统中的层次。不同层次有不同的约束和限制。模块需要遵守这些规则。

画图&文档描述:使用UML图描述模块间、模块内的静态和动态关系。文档描述应该简单清晰,比如使用图表、实例描述、功能列表、事项描述等等,尽量避免使用过多的抽象概念。

我们需要考虑模块的使用者如何使用模块,比如如何添加、修改、定制、扩展模块的功能。

依赖接口+工厂模式。依赖接口表示我们具体的执行者是待定的。工厂模式表示让使用者去指定具体的功能执行者。我们依赖的是接口,我们可以替换和扩展具体的执行者。

接口-过滤器-内核模型。接口可以扩展,过滤器可以动态添加,内核可替换。

接口也就是我们对外提供的标准功能定义。

过滤器(filter,hook),可以在真正功能执行前后,做一些操作,比如日志记录,异常处理,参数校验等等。。

内核,即我们接口功能真正的执行者。可能是数据库操作,http调用等等。

使用扩展性好的设计模式:比如

发布-订阅(pub-sub),监听模式,回调模式。

命令模式。

代理模式。

包装模式。

用消息队列解耦。

任何模块都是有生灭的。

创建:模块的初始化的流程是什么。

销毁:模块关闭时如何回收资源。

实例管理:单例,实例池。比如,连接池。重复利用已创建的实例,创建成本较高

功能的核心就是流程。

抽象:观察所有要实现的功能流程。相同相似的节点和子流程,我们可以去抽象复用。

简化:过长的复杂流程需要细分简化。流程越长越容易失败。

画图:超过三个节点流程要画流程图。

程序的执行往往依赖当前的状态(state machine)。

定义清晰的状态转移图。

复杂的状态变化需要细分简化。

多线程模型,执行者(线程)和执行的内容分离。

共享资源管理,各种锁的应用。

并发模式:生产者-消费者模式,master-slave模式,Actor模式等等。

系统安全行应该有清晰的考虑。

权限校验。

异常定义。

日志记录。

对于异常的处理,应该有清晰定义。所有异常都应该小心处理,应该统一规范处理。

异常流程:异常的流程和正常流程同等对待。

区分用户异常和系统异常。

分层分模块处理。

程序中不能存在直接写死的常量,比如 if(type == 1)。所有的常用需要集中定义和管理。

程序执行依赖的常量,比如状态、类别等等。一般是整数或字符串。

配置文件,一般是程序运行的参数。

资源文件,比如国际化资源等等。

时间。一般的功能需要在有限的时间内执行完成。需要设定任务的timeout或可取消功能。

设备资源占用:限制cpu,内存,硬盘,网络的使用率。

见日志规范

DFT:面向测试的设计。模块和方法尽可能可测好测。一个方法尽可能有少的依赖,比如一个算法的实现,不要和业务代码混在一起,这样可以单调测试算法。

DFS:面向安全的设计。

DFI:面向接口的设计。


相关文章

    暂无相关信息
专题分类