忙碌的好多天过去了,自从上一贴发出后,不少同仁都对插件式开发提出了自己的看法以及分享一些插件式开发比较典型的例子,感谢李锋、肖明等 同仁的分享,也感谢所有顶贴的同志,今天来分享一下插件式开发著名的产品SharpDevelop。正如李锋所 说,SharpDevelop在.Net领域它的地位相当于Java领域Eclipse,他们的底层都有着一个灵活的插件体系框架,他们努力都方向都是各 种平台终有一天都是用同一个IDE。
    SharpDevelop发展至今已经从1.1到现在的4.0,紧跟微软的步伐(如果我是盖茨,我会疯掉),我们在这里讨论的是2.2的框架,虽然有点落 后,但是大体的思想不变,新特性无法展现,有兴趣的朋友可以继续深入研究4.0的新特性。还没有搭建环境的朋友可点击下载, 对于SharpDevelop得部署,我写了一个简要的部署文档,可点 击下载,如果已经成功部署了该环境的朋友可不比下载。
    完成了一系列的安装部署后,SharpDevelop的庐山真面目出现了,呵呵,第一次接触SharpDevelop的代码我也跟很多人一样,好庞大,但 是慢慢地围绕一个主题“插件式”,那么所面对的疑惑将会慢慢解开。
    接下来介绍一下SharpDevelop中的一些比较亮点的功能,这些功能可能也是我们很多项目中需要的,在之后的篇幅中将会对这些功能进行更加深入的内 核级的分析和学习。运行SharpDevelop2.2点击【Tools】-【Addin Scout】既可以看到SharpDevelop的所有插件的全貌。
国际化支持(本地化):
    一个能够在国际上通行的最基本的功能,能够让软件在国际通行上更有竞争力,SharpDevelop默认语言是英语,并且还能支持中文、日文、俄语、西班 牙语等语言,而且可以定制。
可能的用途:现在的软件产品光局限于国内用户明显已经不能够满足现在的需要,走向国际化那么 这个是一个必然的产物,而国际化恰恰就是这个国际化不可或缺的功能,从这个项目的研究中将能够更好地体会到国际化的一些实现流程以及一些实用的方式。
富文本编辑:
    经常在使用Visual Studio平台的时候会想,他们的代码编辑器是如何实现的呢,答案就在SharpDevelop的TextEditor里头 (SharpDevelop\src\Libraries\ICSharpCode.TextEditor)。
可能的用途:项目在千变万化的需求面前,如果不能够满足用户的一些我们认为不合理的需求,有 可能会导致项目的延期甚至失败,除了能够满足用户的业务需求之外,很多用户往往从在界面上提出一些很稀奇古怪的需求,曾经在上海做的项目中,有用户提出的 需求是某个字母后面加“.”号,则这个字母以红色显示,后面加“'”则字母蓝色显示,效果就是这样:AAA.BB'C.DDD'。这种需求看起来简单但是其实有一套语法解析的功能,市面上也没有诸如此类能够自定义显示规则的第三 方控件。所以最后采取的策略是根据用户的需求后台进行解析然后通过GDI绘制输送到前台。这样的实现方式跟SharpDevelop的文本编辑器实现一致 所以SharpDevelop出来的代码显示效果如下:
public static float DrawDocumentWord(Graphics g,string word,PointF position, Font font, Color foreColor)
所以为了使用用户的需求,我想大家可能在界面上能够实现更好的人机交互,可以参考该功能。
命令式的操:
    插件式开发中的所有插件可以说基本上都是命令式出发,而这些命令基本上都是在插件文件里定义好的,直接看实例:

<MenuItem id = "Open" label = "${res:XML.MainMenu.FileMenu.Open}" type="Menu">

<MenuItem id          = "File"

label       = "${res:XML.MainMenu.FileMenu.Open.File}"

icon        = "Icons.16x16.OpenFileIcon"

shortcut    = "Control|O"

class       = "ICSharpCode.SharpDevelop.Commands.OpenFile"/>

<MenuItem id = "Project"

label = "${res:XML.MainMenu.FileMenu.Open.Project}"

icon = "Icons.16x16.OpenProjectIcon"

shortcut = "Control|Shift|O"

class = "ICSharpCode.SharpDevelop.Project.Commands.LoadSolution"/>

</MenuItem>
以上这一段就是打开菜单的一段插件定义,解释一下这些关键字的含义
label  :显示的文字
type :菜单类型(如:按钮、COMBO框、悬停按钮等)
icon   :显示的图标
shortcut :快捷键
class :对应的类
其中class就是该命令触发的地址,我们顺藤摸瓜找到了该命令如下:

public class LoadSolution : AbstractMenuCommand

{

public override void Run()

{

using (OpenFileDialog fdiag  = new OpenFileDialog()) {

fdiag.AddExtension    = true;

fdiag.Filter          = ProjectService.GetAllProjectsFilter(this);

fdiag.Multiselect     = false;

fdiag.CheckFileExists = true;

if (fdiag.ShowDialog(ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.MainForm) == DialogResult.OK) {

ProjectService.LoadSolutionOrProject(fdiag.FileName);

}

}

}

}

呵呵,看到这段代码我想大家应该明白配置文件跟UI以及后台处理的一系列的工作过程,这种命令式触发就完全合应了插件式开发的原理,每个插件都是独立的, 就是如果没有打开这个功能,那整个程序还是能够正常运转,只是缺失了该功能。
可能的用途:在 项目开发的过程中,我们往往碰到很多问题,其中我个人觉得最值得注意的,也是最浪费财力物力的因素,那就是代码重用性。那么插件式的开发思想能够很好地将 某个模块很好的封装起来,从而起到功能独立、即插即用、重用性高、维护方便等方面,现在网络上也流行很多插件式网站开发工具跟此种思想比较类似,比较明显 的就是比如一些电子商务网站:B2B、B2C、C2C的网站定制开发工具。那么延伸到项目开发过程中,如果能够长远规划项目的开发,确保同类项目尽量不做 重复的劳动,把都用到的功能、处理、算法等封装起来,那么类似的新项目就能够节省开发时间,节省下不少的开发成本,而且随着项目的增多,积累的代码财富就 越来越多,最后能够形成良性循环,各个项目都能够及时地交付高质量的软件产品。当然项目是千变万化的,需求是让人匪夷所思的,只能说尽可能地做到,要完全 做纯定制基本上是不可能的,有一点是可以肯定的,积少成多,聚沙成塔。呵呵。
    不知不觉又深夜了。。。一晚上好像写不了多少东西,以后再多续几贴吧,总结一下,今天主要跟大家探讨的是SharpDevelop的一些基本的概念,以及 几个个人觉得比较值得学习的功能,当然简单的篇幅不能很全面地写出SharpDevelop里面包含优秀的架构和编程思想,在之后的帖子中将慢慢深入到SharpDevelop的内核去探寻更为让程序爱好者感到更为奇妙的思想以及技术。。。

睡了,晚安。。
未完待续。。。
下 一贴:SharpDevelop工程源代码解析以及插件实现的内核结构
欢迎拍砖。。。z z Z z z。。。
2011-04-01 02:41:49

转载于:https://www.cnblogs.com/babilone/archive/2011/04/01/2002268.html

C\S结构的插件式开发思想以及向B\S结构的架构延伸(二)相关推荐

  1. .net 插件式开发学习总结

    .NET简谈插件系统开发模式 今天跟大家分享一下我们在日常开发中并不常用的开发模式"插件系统模式",什么叫插件从大一点的概念讲就是我们开发的软件是由很小的模块组成,每一块都能成功的 ...

  2. 从零开始实现ASP.NET Core MVC的插件式开发(五) - 插件的删除和升级

    标题:从零开始实现ASP.NET Core MVC的插件式开发(五) - 使用AssemblyLoadContext实现插件的升级和删除 作者:Lamond Lu 地址:https://www.cnb ...

  3. 从零开始实现ASP.NET Core MVC的插件式开发(四) - 插件安装

    标题:从零开始实现ASP.NET Core MVC的插件式开发(四) - 插件安装 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/11343141. ...

  4. 从零开始实现 ASP.NET Core MVC 的插件式开发(九) - 如何启用预编译视图

    标题:从零开始实现 ASP.NET Core MVC 的插件式开发(九) - 升级.NET 5及启用预编译视图 作者:Lamond Lu 地址:https://www.cnblogs.com/lwql ...

  5. 从零开始实现ASP.NET Core MVC的插件式开发(三) - 如何在运行时启用组件

    标题:从零开始实现ASP.NET Core MVC的插件式开发(三) - 如何在运行时启用组件 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/112 ...

  6. JEECG 引领J2EE新开发模式插件式开发 - 公开课2013-12-12

    JEECG 插件式开发公开课 公开课主题:插件式开发 课程时间   :2013-12-12  20:00-22:00 演讲人 :       张代浩(scott-JEECG作者) 公开课内容: 讲解由 ...

  7. 基于AppDomain的插件式开发

    很多时候,我们都想使用(开发)USB式(热插拔)的应用,例如,开发一个WinForm应用,并且这个WinForm应用能允许开发人员定制扩展插件,又例如,我们可能维护着一个WinService管理系统, ...

  8. 从零开始实现 ASP.NET Core MVC 的插件式开发(七) - 问题汇总及部分问题解决方案...

    标题:从零开始实现 ASP.NET Core MVC 的插件式开发(七) - 问题汇总及部分问题解决方案 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/ ...

  9. 从零开始实现ASP.NET Core MVC的插件式开发(六) - 如何加载插件引用

    标题:从零开始实现ASP.NET Core MVC的插件式开发(六) - 如何加载插件引用. 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/1171 ...

最新文章

  1. matlab 数据集制作,机器学习数据集制作与划分MATLAB实现
  2. Linux中top命令的用法详解
  3. IntelliLight: a Reinforcement Learning Approach for Intelligent Traffic Light Control 论文阅读
  4. JavaEE还是Spring? 都不行! 我们呼吁新的竞争者!
  5. java jdbc 登录_java web JDBC 判断用户登录问题!
  6. 深入源码,深度解析Java 线程池的实现原理
  7. python管理数据库的库_Python中管理数据库
  8. matlab中size(A 2),MATLAB中size(A,2)什么意思
  9. redis lua 设置过期_详解 Redis 内存管理机制和实现
  10. java opencv 轮廓检测,OpenCV 轮廓检测 - 雷霄骅(leixiaohua1020)的个人页面 - OSCHINA - 中文开源技术交流社区...
  11. linux进程操作日志文件,我使用过的Linux命令之tailf - 跟踪日志文件/更好的tail -f版本...
  12. 广州移动MGV3001_ZG_S905L3_UWE5621DS_线刷固件包
  13. 内存不能为read或written的解决方案
  14. 联合查询分组取最新数据
  15. 数学建模之差分方程模型详解
  16. mysql是什么?mysql的特点
  17. TM4C 123GXL上手简介(一) 如何下载从官网下载和使用相关资料
  18. 网页布局中的 px,em,rem,pt
  19. 律师教你借条正规写法,一定要收藏
  20. Android:剖析源码,随心所欲控制Toast显示

热门文章

  1. 小分子化合物的蛋白靶点(蛋白质、酶、受体) + IC50、EC50、Ki 是什么?
  2. Portal top ten
  3. 基于树莓派使用DuerOS的笔记,待续
  4. “借刀杀人”之CSRF拿下盗图狗后台
  5. TRIZ创新方法#学习笔记01# | 创新与TRIZ启蒙 、技术系统进化理论
  6. python ansys workbench联动_【干货】ANSYS与Workbench数据共享与联合仿真教程
  7. 创建一个Dog类,初始化构造方法具有name和age属性。Dog类具有坐和打滚的方法。请编写相应的类并创建对象调用该类。
  8. VMware虚拟机安装ghost系统
  9. 团购Java小程序开发定制的功能?
  10. 数字逻辑学习:布尔代数。