在不修改代码的情况下无限扩展应用项目

在许多需要分模块开发,较为复杂的应用项目(如ERP之类)中,如何做到轻松扩展,往往是一个头疼的问题。

在传统条件下,我们会把各个功能分布在不同的类库中,每添加一个功能就引用一个程序集,而这种方法,我们会发现,当你每添加一个新扩展后,都要对新增的程序集进行引用,这样也意味着,你每次都要重新编译一次主应用程序,这一来一往,维护成本也是有的。

到了.NET 3.5时代,你可能会想到Addin,但这个方法也会带来扩展成本。

而我们所追求的最完美解决方案是:

如果我od 们编写完应用程序后,可以在原有程序不变的情况下,无限添加扩展就好了。也就是说,我把应用A在用户的机器上安装好了,后来我做了一点扩展,这个新功能我已经编译到fc.dll类库中了,可我不想每次升级都要把EXE文件和所有组件重新编译,我只需要把新的fc.dll复制到应用安装目录下就可以了。

 

也许这样一来,维护成本可以大大降低了,到了.NET 4.0时代,利用MEF框架确实可以做到以上要求,但前提条件是:

1、在开发项目前,对整个项目的结构和规范必须明确,至少整个应用程序是什么样子的,你必须在大脑里面有个底。

2、编写一个公共类库,里面包含所有将来要进行扩展组件的行为规范,也就是在这个公共类库中定义所有将来可能被实现的接口,后面所有扩展的程序集都必须实现这些接口。

 

本文涉及的内容可能有些深奥,但愿大家可以接受,接受不了也没关系,毕竟许多东西是需要时间去掌握的。

 

我弄个简单的例子吧,比如,我现在要开发一个应用,在一个窗口上点击按钮后,显示对应球类的名字,如“足球”、“皮球”、“排球”等。但是,可能当初我只给出两个选项——足球和排球,这是我在把程序给客户前就扩展的两个程序集,但过了几天,我突然想起,还有“羽毛球”、“篮球”等,于是,我要为应用程序再加两个dll,但我希望应用程序扩展后不用修改代码,无论我将来扩展100个还是10000个dll我都不需要重新生成主程序,我只要把新的dll扔到应用程序中的Ext文件夹中就可以了。

 

我们来看看如何实现。

1、新建一个公共类库,写两个接口,IBall接口就是与球类信息有关的类,提供扩展时实现该接口。

    public interface IBall
    {
        string GetInformation();
    }


它有一个公共方法GetInformation,返回对应球类的名字,如“足球”.

另一个接口是用来描述元数据的。

    public interface IMetaData
    {
        string BallType { get; }
  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值