关于高内聚低耦合的认知与实际应用
2013-12-26 16:02
211 查看
本文假定在问题比较简单的情况下进行。
我有如下几个程序模块:
数据清理总调度,它调度以下几个子任务来完成目标
数据清理任务1
数据清理任务2
数据清理任务3
现在要记录数据清理日志,需要往CLEAN_LOG表中insert清理数据记录,那么现在我有两种做法:
【方法1】
在子任务中,各自执行insert日志记录的操作。
【方法2】
在总任务中,每调用一个子任务执行一次insert日志记录的操作。
我就这个问题问了我们团队的成员,大家都表示二者没有什么区别,都一样。
大家都知道,单就这个具体事情而言,其实两种做法的工作量是一样的。
但从软件学的角度而言,一般地,我们应当选择【方法2】。为什么呢?
这就是我们常说的一些软件学思想了:
高内聚与低耦合、单一职责原则、可复用可重用、、、
如果将日志记录的操作分散放在各个子模块中进行,
那就违背了各个子模块执行单一职责(清理特定数据)的原则,而且记录日志需要和模块外的日志表等环境产生依赖(耦合),从而破坏了其内聚性,可想而知 最终其重用性就会大打折扣。而一旦软件失去了重用性,那软件本原的优势也就不复存在了。
反之,如将日志记录操作集中放在总调度模块中进行,
则可以很好的规避上面的种种问题。
当然,你也不用担心各模块日志信息的反馈问题,
这可以通过增加子任务的调用返回值来实现。
我有如下几个程序模块:
数据清理总调度,它调度以下几个子任务来完成目标
数据清理任务1
数据清理任务2
数据清理任务3
现在要记录数据清理日志,需要往CLEAN_LOG表中insert清理数据记录,那么现在我有两种做法:
【方法1】
在子任务中,各自执行insert日志记录的操作。
【方法2】
在总任务中,每调用一个子任务执行一次insert日志记录的操作。
我就这个问题问了我们团队的成员,大家都表示二者没有什么区别,都一样。
大家都知道,单就这个具体事情而言,其实两种做法的工作量是一样的。
但从软件学的角度而言,一般地,我们应当选择【方法2】。为什么呢?
这就是我们常说的一些软件学思想了:
高内聚与低耦合、单一职责原则、可复用可重用、、、
如果将日志记录的操作分散放在各个子模块中进行,
那就违背了各个子模块执行单一职责(清理特定数据)的原则,而且记录日志需要和模块外的日志表等环境产生依赖(耦合),从而破坏了其内聚性,可想而知 最终其重用性就会大打折扣。而一旦软件失去了重用性,那软件本原的优势也就不复存在了。
反之,如将日志记录操作集中放在总调度模块中进行,
则可以很好的规避上面的种种问题。
当然,你也不用担心各模块日志信息的反馈问题,
这可以通过增加子任务的调用返回值来实现。
相关文章推荐
- 浏览器模式与文档模式 及其开发中处理方式
- eclipse导入android项目错误,项目名称上有红叉,但代码中无报错
- VMware9虚拟机安装MAC OS X Mountain Lion 10.8.2详细图文教程
- SIFT/SURF、haar特征、广义hough变换的特性对比分析
- C#高效绘图(转)
- 判断单链表是否存在环,并找出环的入口
- CSS中的绝对定位与相对定位
- Spring 3.X bean.xml文件格式
- dynamic_cast < type-id > ( expression )
- SEO搜索引擎优化
- mysql常用控制台命令
- Eclipse导入项目后遇js卡死解决方法
- 全排列(百度迅雷笔试题)
- 路由器、交换机与防火墙的联接
- VARIANTs, SAFEARRAYs, and BSTRs
- detached entity passed to persist: hibernate annotation生成uuid主键
- mysql常用控制台命令
- php编译安装configure完全配置够日常所用功能
- html style的width不起作用
- winform 使用Anchor属性进行界面布局的方法详解