`
mikab
  • 浏览: 17780 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

配置继承模式

阅读更多
本人曾供职于一家国内的还算比较大MIS系统开发商,工作的主要内容是用一套有默认实现的模板式框架去开发一些业务应用系统。在开发的过程中,开发工作的绝大部分内容是配置和写展示用的jsp(没有其他的模板技术)。搞jsp我不在行,于是我就把目标放在了如何减少配置的工作量。这也就是配置继承模式的来源了。到今天算是小有所成,本着请共享和求教的愿望,把我的东西贴出来,希望各位JE大牛帮忙给点意见,本人不甚感激。
话归正题,所谓配置继承呢,准确的应该叫配置信息继承,是指从功能对配置信息的需要出发,按照功能、模块、系统划分建立对应的树形配置域,仿照类继承的方式(系统域是最顶层的父类,功能是最底层的子类)而配置信息获取和管理的模式。在配置继承中,强调功能对配置信息具有控制权:可添加、覆盖、删除配置项;同时配置信息又是可从父域继承而来的:共性信息可以在上级配置以达到共享的目的。除此之外,在其中还加上了以正则表达式为基础的模式的使用,有点像struts1.2以后的通配符的使用。
举例来说,假设在一个比较简单的web系统内有四个功能分别是功能1、功能2、功能3、功能4,其中功能1、功能2是属于模块A的,功能3、功能4是属于模块B的,系统数据源在JNDI中的名字是需要配置的,而且系统在现阶段只是访问一个数据库实例。我们过去的做法是直接建立一个全局共享的配置,里面写明数据源的jndi名。但是世界总是在进步,突然有一天,我们发现一个数据库已经满足不了性能的需要了,需要将一部分功能移植到另外一个新的数据库上面去。首先移的是功能4,数据库的移植和数据的交互先且不说,功能4的程序如何来改呢?我们痛苦的改了一下,凑合着能用了。但是发现移植了功能4的数据访问后还不能满足需要,打算也把功能3移植过去,于是我们又受尽了折磨的把功能3代码改的凑合能用了。但是突然有一天,我们客户对硬件做了个大升级,上了一个无比NIU的数据库,于是我们又需把所有的功能的数据库访问代码改到访问新的数据库上去,这下我们崩溃了,以前不就是白白折腾了嘛。
如果使用配置继承来说,我们首先是在系统域上配置好数据源的名字就可以,通过继承全系统使用这个数据源。到需要移植功能4的时候,我们只需要在功能4的配置信息里覆盖默认继承来的数据源的名字就可以了。移植完了功能3之后呢,我们只需要在模块B那里配置使用新的数据源,把功能4的特殊配置去掉就可以了。如果是完全的移植数据库,那么我们只需要将系统域的配置修改,并且去掉了模块B的特殊配置就可以。可以看到,配置继承是兼顾灵活和共享的一种配置信息的管理模式,特别使用于各个功能的实现的大部分配置信息是相同的情况。当然,要使用配置继承,在功能实现的时候,就需要按照功能去取配置信息的集合,而不是直接引用全局配置信息的集合,这一点和原来的编程方式是有很大的区别。
我做了个配置继承的实现,但是弄了之后个人觉得实现的太糙,而且在实现对spring、struts、hibernate的支持时由于不熟觉得有点摸不着边,因此特别希望有大牛能给一些指导意见,最好是能有感兴趣的朋友跟我一起把他做下去。我把我的实现的代码都已经传到http://code.google.com/p/pyramid/上了,现在主要实现了对XML格式的配置文件的支持,请大家多多指教。
个人MSN:mikabpeng@msn.com,欢迎大家交流。
分享到:
评论
2 楼 mikab 2008-09-06  
JavaTestJava 写道
看了.理解如下.

1:小模快配置只负责小模快的开关.
2:优先级根据父级大于子级.

因为没具体的配置,个人想了一下.只想到两种.
1:父级 A B C D 子级a b c d 都实现四个配置,在父类各配置有默认值为0的情况下,取子类的配置a,否则取父配置A.

2:也可以把,配置父为总开关A B 子类有,子1  c d e 子2 e f g

不知道我理解的对不对?请指正.

优先级是如果子级有该配置项并且父级也有该配置项时则在自级的范围内在该配置项上取子级的配置,如果子级没有的话则从父级继承。这是从类继承的继承、覆盖(override)带过来的。大模块的配置信息能够被大模块内的各小模块所继承和直接使用,因此大模块这一级应该主要配置在大模块内具有共性的配置信息;小模块内再单独配置其特性的配置信息。

这是一种泛化的配置信息管理和获取的方式,并不是仅仅只针对于数据源或者某种特定的配置信息。
1 楼 JavaTestJava 2008-09-05  
看了.理解如下.

1:小模快配置只负责小模快的开关.
2:优先级根据父级大于子级.

因为没具体的配置,个人想了一下.只想到两种.
1:父级 A B C D 子级a b c d 都实现四个配置,在父类各配置有默认值为0的情况下,取子类的配置a,否则取父配置A.

2:也可以把,配置父为总开关A B 子类有,子1  c d e 子2 e f g

不知道我理解的对不对?请指正.

相关推荐

    JavaScript模式中文[pdf] 百度云

     类式继承模式#3——借用和设置原型  类式继承模式#4——共享原型  类式继承模式#5——临时构造函数  Klass  原型继承  通过复制属性实现继承  借用方法  小结  第7章 设计模式  单体模式  工厂模式  ...

    Spring In Action 继承Bean的配置

    总之,Spring的Bean继承配置是一种强大的设计模式,它允许我们在多个Bean之间共享和重用配置,同时还能进行定制化。通过XML、源码分析以及合适的工具,我们可以更好地理解和利用这一特性,提高代码的可读性和可维护...

    JavaScript模式 斯托扬·斯特凡洛夫 著

    类式继承模式#3——借用和设置原型 类式继承模式#4——共享原型 类式继承模式#5——临时构造函数 Klass 原型继承 通过复制属性实现继承 借用方法 小结 第7章 设计模式 单体模式 工厂模式 迭代器模式 装饰者模式 策略...

    Hibernate继承映射代码

    在"javaII-8"这个压缩包文件中,很可能包含了实现Hibernate继承映射和C3P0连接池配置的源代码示例。这些代码可能包括实体类定义、映射文件(如.hbm.xml或使用注解的类)、Hibernate配置文件(hibernate.cfg.xml)...

    WPF窗口直接类继承

    在实际开发中,还可以结合MVVM(Model-View-ViewModel)设计模式,将业务逻辑与视图分离,进一步提升代码的可测试性和可维护性。窗口类可以作为ViewModel的容器,通过数据绑定来更新界面,而不是直接操作UI元素。 ...

    Spring事物配置的五种模式

    ### Spring事务配置的五种模式详解 在Spring框架中,事务管理是十分重要的特性之一,它可以帮助开发者确保数据的一致性和完整性。对于不同的业务场景,Spring提供了多种事务配置的方式,以便于灵活应对各种需求。...

    设计模式之策略模式 鸭子问题

    1. 许多相关的类仅仅是行为有异,策略提供了一种用多个行为中的一个行为来配置一个类的方法。 2. 需要使用一个算法的不同变体。 3. 算法使用客户不应该知道的数据,可使用策略模式避免暴漏复杂的与算法相关的数据...

    js继承的用法

    根据提供的文件信息,我们可以分析并...在实际开发中,这种机制被广泛应用于各种场景,特别是在使用jQuery等库时,经常会看到这样的继承模式。理解和掌握这种继承机制对于编写高效、可维护的JavaScript代码至关重要。

    域用户配置文件的漫游配置

    5. 关闭权限继承,防止父文件夹的权限影响子文件夹,确保对每个用户配置文件的精确控制。 6. 将文件夹的所有权赋予用户本身,这是为了确保用户能够正确访问和使用自己的配置文件。 7. 避免赋予用户过高的权限,如...

    策略模式 template模式

    1. 环境类(Context):用一个 ConcreteStrategy 对象来配置。维护一个对 Strategy 对象的引用。可定义一个接口来让 Strategy 访问它的数据。 2. 抽象策略类(Strategy):定义所有支持的算法的公共接口。Context ...

    WebConfig配置详解.doc

    用户可以在子目录下新建一个 Web.config 文件,以提供除从父目录继承的配置信息以外的配置信息,也可以重写或修改父目录中定义的设置。 在 Web.config 文件中,可以分为以下几个部分: 1. 配置节处理程序声明:...

    WCF继承实现demo

    在WCF中,服务可以通过继承来扩展其功能,这是一种强大的设计模式,尤其对于初学者来说,理解并掌握WCF的继承机制对提升开发能力非常有帮助。 **WCF服务继承** 主要是通过定义基服务合同(Service Contract)和派生...

    jpa/hibernate继承注解

    这种模式适用于实体类具有大量重叠属性,且子类之间几乎没有共同属性的情况。 5. **使用@MappedSuperclass** `@MappedSuperclass`是一个非实体注解,用于那些包含要继承到实体类的字段和方法的类。这个类本身不会...

    设计模式源码

    - 装饰模式动态地给一个对象添加一些额外的职责,提供了比继承更具弹性的扩展方式。 - 观察者模式定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 通过...

    C#工厂模式多数据库(实现SQL和MYSQL的切换)

    在C#中,工厂模式通常通过定义一个接口或抽象类,然后由多个具体类实现这个接口或继承这个抽象类来完成。当需要创建对象时,我们不再直接实例化具体的类,而是通过工厂类来创建,这样就解耦了对象的创建与对象的使用...

    C#设计模式PDF,主要介绍如何用最常见的设计模式写C#程序。

    在C#中,建造者模式常用于创建复杂的对象结构,如数据库连接字符串或配置文件。 4. **代理模式**:代理模式为其他对象提供一种代理以控制对这个对象的访问。在C#中,可以使用代理模式来添加额外的功能,如日志记录...

    c#几种常用的设计模式

    在软件开发中,设计模式是经过时间和实践验证的解决方案,用于解决常见的编程问题。...抽象工厂模式则帮助在不同环境或配置下创建一组相关对象。熟练掌握这些设计模式,能够提升代码质量和项目维护性。

    设计模式PPT合集

    单例模式常用于配置中心、线程池等场景,确保系统资源的有效利用。 二、工厂模式 工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在Java中,工厂模式通过创建一个工厂类来生产不同类型的对象,...

    设计模式之工厂模式Java实现和类设计图

    类设计图在设计模式中扮演着重要的角色,它用图形方式清晰地展示了类与类之间的关系,如继承、聚合、关联等。在工厂模式中,设计图会突出显示工厂类和产品类的结构,以及它们之间的关系。例如,工厂类可能通过箭头...

    前端设计模式大全,包括工厂模式,原型模式,构造器模式等

    在前端开发中,工厂模式常用于生成具有相同接口但不同实现的对象,比如根据配置动态创建不同类型的组件。这样可以避免硬编码实例化逻辑,提高代码的灵活性。 2. 原型模式: 原型模式也是一种创建型设计模式,它通过...

Global site tag (gtag.js) - Google Analytics