软件设计_接口_中间层
来源:互联网 发布:线切割手动编程割直线 编辑:程序博客网 时间:2024/03/29 15:42
软件设计的核心:
通过设计稳定的接口,分隔系统各部分(上下层次:上层应用逻辑/底层核心支撑框架;平行的层次:模型/视图/控制器),让各部分独立的变化。
接口在软件设计中至关重要,设计良好,稳定可靠,高内聚低耦合,可扩展性强的接口能保证软件稳定的进展升级。
软件架构其实就是接口的设计。
设计模式的核心思想:
1.分析系统中经常变化的和稳定的部分
2.设计接口分隔上面两部分
3.通过添加一个中间层封装接口,可以实现任何设计需求
各种不同的设计模式其实就是在不同的需求下,围绕上面三点的不同表现形式。
一个中间层就是封装了一个设计概念。
[设计模式中的例子...]
看看中间层如何在COM中起作用。
1.智能指针
客户使用COM往往在复制接口指针后需要手动调用AddRef,使用完后调用Release。
这一工作使得COM使用非常麻烦。
另外QueryInterface中的void**参数也不是类型安全的。
这一切可以通过智能接口指针简化编程。
智能接口指针就是简化设计的一个中间层。
2. 调度接口, IDispatch
C++可以直接通过COM接口访问COM组件,因为它可以直接访问vbtl
C++客户 <==> COM接口(vbtl) <==> COM组件
那么VB,javascript等客户呢?他们不能直接访问内存,访问vbtl
这时加入一个中间层 IDispatch,然后这样
VB客户 <==> IDispatch::Invoke <==> 调度接口(vbtl) <==> 实现IDispatch接口的COM组件
中间层 IDispatch 接口对VB的请求作了vbtl映射,分隔了两边的变化
3.类型库
通过调度接口IDispatch,VB,C++用户可以在不知COM接口任何信息情况下调用COM组件。
VB用户 ==(直接使用,编译器无法检查参数类型) ==> COM组件
但这样做不在编译时进行类型检查,容易引入错误(bug)。
类型库提供COM组件接口信息,它类似于C++头文件,但是二进制的,语言无关的。
VB用户 ==(类型库,编译器检查参数类型) ==> COM组件
这里,类型库就是中间层,提供编译时类型检查功能
中间层在Windows系统中的应用
1.创建线程
操作系统提供CreateThread创建线程,这个函数是底层的,独立于语言的,任何语言的创建线程函数最终应该都是调用了CreateThread。
对于C++,创建线程有特殊的要求,不能直接调用CreateThread。
C++标准库中很多函数,如strerror, asctime等未考虑多线程,使用了全局的变量,所以再多线程下运行时库会创建_ptidata的数据结构
与每个线程关联。
为分隔两部分,C++提供_beginthreadex创建线程。
C++用户 <==> _beginthreadex <==> CreateThread
_beginthreadex相当于中间层,分隔系统部分和用户部分
2.RAII
C++异常机制保证局部变量的析构函数被调用。
可通过C++对象生命期来控制资源
例如CPPUnit中有一段代码:
- static CPPUNIT_NS::TestSuite *suite() /
- { /
- const CPPUNIT_NS::TestNamer &namer = getTestNamer__(); /
- std::auto_ptr<CPPUNIT_NS::TestSuite> suite( /
- new CPPUNIT_NS::TestSuite( namer.getFixtureName() )); /
- CPPUNIT_NS::ConcretTestFixtureFactory<TestFixtureType> factory; /
- CPPUNIT_NS::TestSuiteBuilderContextBase context( *suite.get(), /
- namer, /
- factory ); /
- TestFixtureType::addTestsToSuite( context ); /
- return suite.release(); /
- }
这里通过std::auto_ptr 智能指针确保在发生异常情况下在堆上开辟的 CPPUNIT_NS::TestSuite 对象能被正确释放。
std::auto_ptr 相当于用户和编译器之间的一个中间层,辅助内存管理。
http://blog.csdn.net/hongjiqin/article/details/4443369
- 软件设计_接口_中间层
- 软件设计_接口_中间层
- 软件设计_接口_中间层
- 软件设计-接口-中间层
- 软件设计之道_读书纪要
- 转载_软件设计的七大原则
- c#_接口
- 黑马程序员_接口
- Java基础_接口
- 黑马程序员_接口
- 黑马程序员_接口
- 黑马程序员_接口
- EIT框架_接口
- 抽象类_接口
- java--多态_接口
- 0011_接口
- java基础_接口
- lwj_C#_接口
- U-BOOT下使用bootm引导内核方法
- Vtk读取并显示保存图像
- 快速获取Linux系统本机IP
- CString转char* CString转string CString转int
- Broadcast
- 软件设计_接口_中间层
- jQuery Autocomplete简单案例
- c++ 与pb 类型对比
- 多叉树xml的数据结构
- VC之美化界面篇 (转)
- uploadify 配置
- Java与C++在面象对象基本概念上的区分
- 关于验证常用的几个类文件和代码
- oracle 触发器 学习笔记