模块化架构

将单个应用拆分拆分成不同的模块可大大改善设计。20世纪60年代意大利面条代码。
模块化程序,是由不同模块构成,一个模块是一组类的集合,模块中有些类是public级别,外部模块可访问;有些是private基本,外部不可访问。
此外,一个模块会依赖于其他模块,并在较高层次上声明了执行所需的功能性环境。
评价模块好坏: 检测模块间的依赖。
项目都会演进,规模变大。
第一版: 一定要清除所有不必要的交叉引用关系,将API按照逻辑功能进行模块开发。
只要代码开始访问其他无关模块中的内容时,架构退化就不可避免了。
只关注那些对成功至为重要的关键组件
模块化可使项目更加清楚,更好管理模块间的依赖关系,维护更加灵活。一开始就模块化思想进行设计才是王道。

1.模块化计的类型

(1)只与用户界面有关的代码不需要提供对外的API,它完全封闭,只需保证功能可用即可。Favorites 幸运模块
(2)简单又通用的功能类库模块---可使用第三方类源码,(如果直接使用第三方库,拓展会出现问题,此时设计中应该以PDF文档的格式来发布相关的API文档,对相应的规范内容加以说明,同时提供示例代码)
只有真正的模块化处理才能解决多个开发商产品间冲突的问题。模块化架构将规范与具体实现分离,分别放到不同的模块中。
(3)方法
1)定义一个模块专用于存放规范,其文档中覆盖的实际接口和抽象类灯。此模块中至少存放一个小的“入口点”,比如说构造函数或者静态工厂方法,这样客户端代码可通过入口获取具体的实现内容。
模块化类库,不应该通过复制类文件来解决多个开发方类库冲突的问题,因为会导致类文件重复。复制类文件无法与开发商的具体实现分离。
2)一个独立模块对外提供很多接口,再加上一两个工厂类,就可以用了定义一套规范。可以添加一些文档进行说明
3)具体实现,是一个没有直接对外暴露其功能的包,它只依赖那个规范模块和其他一些实现模块,然后通过注册服务的方式,将自己实现的工厂注入到服务系统中。
4)一个客户也可以看成一个模块,同具体实现。
5)但有时候间接依赖也是必须的,有时候规范模块也会依赖实现模块

2.组件定位和交互

模块化目的:实现程序中各个组成部分的松耦合。两个模块如果独立,彼此就不知道对方的存在,通过接口进行交互。
可减少杂乱代码。
运行环境准备工作通常是由一个框架来完成的,使用依赖注入的方式,完成初始化。
(1)定义接口类
(2)继承实现
有参数的构造函数是一种常用的注入方式
模块化开发缺点:执行较慢,毕竟没有免费的午餐。
最好不使用直接调用代码来绑定服务的方式,而使用一种声明的方式进行服务绑定。常用声明方式System.getProperty("...")来完成。
另一种方式使用 xml 配置方式,

3.编写扩展点

Java的Lookup就很好,可以参考,它运行外部通过实现该接口来扩展功能。

4.循环依赖的必要性

有些系统循环依赖是很有用的,特别是遗留代码。但如果新代码就像一团乱麻。
对于容器,规则越严格,用户基于该容器开发架构越清晰。
当这一团乱麻无法维护时,只得将它打在一个包里,这样丧失了多模块的好处。
可以作为组件注入机制来避免或者减少循环依赖,从而做到模块间的分离。
当决定模块化开发,就一定保证模块间出现循环依赖。

5.满城尽是Lookup

Java的Lookup很好,但是C++有什么可以替代Lookup的呢?
qt的信号槽? 虽然可以,但是有时反应会很慢。

6.Lookup的滥用

Java的Lookup很好,但不能滥用。如信号槽方式虽好,但滥用会导致系统性能下降。

软件框架-无绪开发4相关推荐

  1. 软件框架-无绪开发5

    设计API时要区分其目标用户群 提供给客户端代码的API与为开发商提供的API是不同的. 1.API升级 (1)抛出异常模式,不太好,用户升级一次每个api需要写好几行代码 (2)预留参数 设计时最好 ...

  2. node.js 桌面软件框架 electron 开发流程

    ##node.js 桌面软件框架 electron 开发流程 ####步骤 1,安装electron npm --g electron 2,创建工程 //新建app文件夹 mkdir app //创建 ...

  3. 软件框架技术1(MyBatis)

    目录 1.软件框架技术概述: 1.1为什么会出现软件框架技术? 1.2框架概述 1.3框架的优势 2.Maven 2.1.maven是什么 2.2maven依赖管理 2.3仓库 ​编辑2.4maven ...

  4. Rhapsody软件框架和UML的实时系统开发

    转自http://tech.it168.com/a2009/0827/669/000000669614.shtml 引言 面向对象的软件设计方法推崇抽象.可重用且易维护的设计模式.其中,一个普遍采用的 ...

  5. 《多旋翼无人飞行器嵌入式飞控开发指南》里基于FreeRTOS的无人机软件框架

    <多旋翼无人飞行器嵌入式飞控开发指南>里基于FreeRTOS的无人机软件框架

  6. 嵌入式底层开发的软件框架简述

    在底层代码编写中,初始的框架设计总会面临选择,针对实际的硬件使用环境,大家对于使用的软件框架有很多选择,今天我简单描述一些比较常用的架构,让大家能够理解并选择合适的架构.    1. 简单的顺序执行程 ...

  7. 高通开发系列 - Voice Call之语音通话软件框架介绍(翻译)

    By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! ...

  8. 软件框架设计的艺术----读书总结

    总结 软件开发的艺术 理想主义,经验主义和无绪 文艺复兴时期,现代科学产生了两个重量级理论: 理性主义和经验主义. 理性主义认为理智是信息的首要来源.给出一个假设,只要通过思考就能理解和描述这个世界, ...

  9. 使用 CodeIgniter 框架快速开发 PHP 应用(二)

    使用 CodeIgniter 框架快速开发 PHP 应用(二) 原文:使用 CodeIgniter 框架快速开发 PHP 应用(二) 二分钟: 建立一个 CodeIgniter 网站 用CI建一个网站 ...

最新文章

  1. 微软MSN推出新一代Live服务 能离线编辑博客
  2. python交互式和文件式区别_Python中的交互式数据可视化与Bokeh(系列五)
  3. SQLSERVER 2014 SP1 的服务器 日志文件无法收缩的处理
  4. 鲁迅散文——随感录三十五
  5. 有的日期输入框,可直接调用javascripts
  6. $(document).ready()和window.onload之间的差异
  7. redhat linux5 安装配置 JDK1.6+Tomcat6+Apache2.2.x+jk_mod1.2
  8. python字符串代码对象_Python源码剖析 - Python中的字符串对象
  9. MDF文件查看器(SQL MDF Viewer) 1.0 绿色版
  10. 图像加密之灰度加密:基于 密钥 × 解钥 ≡ 1 mod 灰度级 的一轮加密算法例子——lena图
  11. Android中铃声总结源码
  12. 癫痫脑电信号特征提取方法
  13. 教你怎么快速读出python numpy中给定的array的shape
  14. mac正常连wifi,无法解析域名
  15. 【Unity2D】关卡编辑好帮手——TileMap
  16. 1009 数字黑洞(C++)
  17. Linux exec函数的使用
  18. FPGA基础入门【12】开发板USB鼠标控制
  19. RT-Thread简介
  20. 【cocos2dx面试题干货】--2021年最新cocos2dx面试干货(引擎篇)

热门文章

  1. jqGrid学习笔记(一)
  2. mvn compile报错“程序包com.XXX不存在”
  3. oracle上亿数据的删除
  4. illustrate插件--AI插件--印前插件--CADTools--导入库分析(一)
  5. 联通鸿蒙卡怎么样,联通腾讯大王卡对比百度大神卡:到底应该怎么选?
  6. win7 修复计算机 黑屏,拯救黑屏 Win7系统引导文件丢失修复教程
  7. Caffe MNIST 手写数字识别(全面流程)
  8. C++ 传参时传内置类型时用传值(pass by value)方式效率较高
  9. 相机的内外参与相机标定
  10. oralce 经典习题系列-查询