`

架构设计的非侵入性原则

阅读更多

最近常常看到JAVA社区热闹异常,各类框架齐齐上阵,各路神仙尽显神通。.NET社区也不甘寂寞,高手都冒出来了,于是移植自JAVA的框架,自己独创的框架,大而全的框架.....且不说技术上的优劣,也不比谁的效率,其实我们在项目中选择一个框架的时候很多时候都是在考虑这个框架的适用性,因为在做项目的时候因为各种各样的原因我们会受到各种各样的制约而不能够随心所欲的构建系统,而且就算我们能够作主的时候也会因为框架本身的限制而作罢,这点在改造和重构已有系统的时候常常会出现,所以在我们选择一个框架或者设计一个框架的时候,适用性就很值得我们关注了。

这里我觉得有一点需要纠正一下,很多时候有些朋友发布了自己的东西都喜欢用XX框架什么的,但是很多时候是有误区的,所谓框架(Framework)指的是我们所需要我们遵守一定规则在上面进行开发的平台,可能还需要提供一系列的SDK来帮助我们开发。比如.NET Framework,呵呵。WSS也算是一种Framework,因为我们也需要遵照他的规则在上面做二次开,再比如Eclipse或者Sharp develope,struts都算是Framework。而iBaties,Hibernate之类的都不算,这样子的算是组件(Component),还有一类工具可以通过数据库生成数据访问代码,页面等等的,这个应该怎么说呢,可能应该算是代码生成器......

不知不觉说了很多不算废话的废话,那么什么是架构的侵入性呢?所谓侵入性就是指的这个架构设计出来的部件对系统的影响范围,比如框架的侵入性就很高,因为在一个工程中引入一个框架,你的整个设计都必须围绕这个框架来进行,一旦使用了,框架的可替代性几乎为0,这样子就是搞侵入性。组件的侵入性就比较低,比如ibaties,他可以在任何java框架下使用,甚至可以和其他ORM组件共存,你仅仅需要引入,配置,然后就可以使用了,你也可以用其他的ORM替换他,所以......这个体验应该是很愉快的。
所以话说回来说到如果我们在设计一个通用架构的时候就应该注意到这个一个非常重要的地方,除非我们只是自己拿来用用,否则我们不应该假设我们的设计的用户已经具备怎么怎么样的环境或者是需要做什么特殊的设计才能够使用。
这里打个比方,假如说我们在设计一个通用权限管理什么什么的时候我们就要想好,这是一个组件,还是框架,还是一个现成系统(复用通过改改代码实现,其实个人觉得这种设计很低级,虽然有的这样子的东西功能确实丰富)。确定了目标之后我们才好开始下一步,比如确定是一个框架的话可能发挥要自由一些,因为不需要高度的内聚,不过可能因为框架要设计的方方面面太多了,所以老是觉得个人的力量不足以搞这种东西出来。如果是组件的话就需要高度的内聚来实现非侵入式,比如引入DLL的时候还需要让所有页面继承自某个基类页就不算是一个good idear。
虽然话说得好听,不过我在自己做设计的时候还是常常因为功力不够造成一些侵入的现象,但是高内聚低耦合都是我们不断追求的目标,所以所有做设计的同学们一起努力吧
PS:这里卖弄了下词藻,呵呵,侵入就是在两个系统发生耦合的时候造成的...........
估计发首页会被人骂,我就想看看那些人会骂而已

分享到:
评论

相关推荐

    计算机网络系统设计解决方案.doc

    1.1、设计原则 (1)安全性原则: 系统应能提供较高的安全手段,防止系统外部成员的非法侵入以及操作人员的越级 操作。安全性是信息化建设的基础保障。出于安全及保密因素,现代信息化建设工程对 安全性有很高的...

    校园网络设计方案.pdf

    校园网的总体设计原则是: 开放性:采用开放性的网络体系,以方便网络的升级、扩展和互联;同 时在选择服务器、网络产品时,强调产品支持的网络协议的国际标准 化; 可扩充性:从主干网络设备的选型及其模块、插槽个...

    01-微盟 Elasticsearch 运维实践

    介绍在使用 Elasticsearch 进行数据搜索和分析时,应该遵循的一些规范和建议,包括 ES 架构的选择、索引结构的设计、查询语句的优化、写入优化等等,以提高 Elasticsearch 的性能、可靠性、安全性和可维护性。...

    某公司网络安全方案.doc

    信息安全体系建立的原则:标准 性原则、整体性原则、实用性原则、先进性原则 信息安全策略 总体策略划分为物理安全、网络安全、身份认证、应用授权与访问控制、数据加密 、数据备份等若干方面进行阐述。 注重web应用...

    JAVA上百实例源码以及开源项目

    例如,容易实现协议的设计。 Java EJB中有、无状态SessionBean的两个例子 两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;...

    JAVA上百实例源码以及开源项目源代码

    例如,容易实现协议的设计。 Java EJB中有、无状态SessionBean的两个例子 两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;...

    java开源包1

    设计原则 容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多...

    java开源包11

    设计原则 容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多...

    java开源包2

    设计原则 容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多...

    java开源包3

    设计原则 容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多...

    java开源包6

    设计原则 容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多...

    java开源包5

    设计原则 容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多...

    java开源包10

    设计原则 容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多...

    java开源包4

    设计原则 容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多...

    java开源包8

    设计原则 容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多...

    java开源包7

    设计原则 容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多...

    java开源包9

    设计原则 容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多...

    java开源包101

    设计原则 容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多...

    Java资源包01

    设计原则 容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多...

Global site tag (gtag.js) - Google Analytics