【目录】-【模块化和插件化】-【概念】

  这算是OSGi的基础和灵魂,没有他,后面将要介绍的很多功能都会黯然失色。

  先看文档怎么说:
  1) 物理隔离:基于UIOSP开发的模块是一个物理隔离的可单独部署的模块,每一个模块拥有独立的文件夹、类型空间、资源和类加载器。模块间互相独立、互相隔离且互不影响。
  2) 高度可重用:模块的重用不需要再更改任何代码,只需要将模块拷贝到UIOSP指定的插件目录下,它的功能便向其它模块暴露。
  3) 规范化:模块具有统一的标准,每一个模块的目录结构、模块配置都是统一的,开发方法也完全一致。
  4) 快速集成:仅需要将模块都拷贝到指定的插件目录就能够实现模块功能的快速集成,无需再更改任何的代码。
  5) 易部署和升级:通过拷贝即可实现部署和升级。

  乍一看起来,这五个貌似是互不相干,其实他们围绕着一个最基本的最核心的点来说的,那就是“封装”,逻辑和物理兼顾的封装。

  对于逻辑封装我们很好理解的,这是OOP干的事儿,封装变化,面向接口编程。这一点虽然是大家都常在谈的,但是要真的应用在具体业务逻辑上时,是得需要花些功夫和实践的,对于OSGi的最佳实践来说,尤其重要。
  

  物理封装,就是这里所说的“物理隔离”,隔离的层次级别很低,到了具体的实体文件。首先,不像是普通的.NET程序,如WinForm,默认情况下,功能程序集文件都必须是在bin目录下,和主程序一块儿,如Web,文件都是在同一个目录层次中,核心逻辑也是在这个启动路径的bin目录中,他们是紧密联系的,无法分开存放的。OSGi的目录结构是可以自定义的,你可以把程序中任意模块的路径指向到任意路径,当然这些路径都是在一个已经定义好的范围之内,在这个范围内任意位置的程序集都可以被访问的到。比如你可以把主程序放在C盘,功能模块文件放在D盘。原理上讲,就是OSGi.NET改变了.NET默认的加载顺序和机制,允许程序动态加载指定路径的程序集。

  其次,就是物理级别的“封装变化”,对于一个程序来说,每个子功能模块,根据需求的不同,对整体而言是可变的,也是不停变化的,以前只是将逻辑封装在一个程序集里,那么是否可以将多个关联程序集再封装在一个“模块”里呢?以前是内部的封装,现在是内部和外部一起封装,更抽象的封装。逻辑封装的表现形式是一个程序集,通常就是一个具体名字的dll,这里物理的封装就是一个具体名字的文件夹,在这个文件夹里包含了他所需的多个基本的程序集。理论上说,最佳场景应该是逻辑上、物理上与其他封装好的模块之间相互独立且隔离的,这样的话,我们能很简单的从文件结构上提炼出模块之间的关系以及整个软件功能的组成,这为以后的更新、维护、部署甚至重用都带来了好处。比如一个WinForm上的封装好的数据访问模块可以直接复制到一个Web上无需改动,即可使用,这也就是所谓的“高度可重用”,“快速集成”以及“易部署和升级”,他们依赖的就是比较好的逻辑和物理封装,还有可设置的加载路径。
  

  再说说“规范化”,这个简单的说就是“标准的力量”,无论你如何封装,总要遵循一定的规则和指导原则,逻辑封装得尽最大可能遵守设计模式的要求,物理隔离也是同样的道理,他遵循的是OSGi.NET所设计的“自描述机制”,每个模块通过一个Manifest.xml来描述自己的诸多参数、默认设置和描述信息,例如如何启动,从哪儿启动,怎么启动,依赖关系等等,更高级的还有扩展、扩展点,服务注册等,当然还得有诸如版本,名称等基本内容。如果,两个不同的企业发布了不同的模块,但他们恰巧遵循了相同的封装原则,结果会怎样?是的,他们的模块,理论上可以被同一个用户使用在同一个程序中,这就是规范化的好处。对一个企业来说,当然大家都得遵循同一个标准,不论是应用在哪个具体的项目上,开发、迁移和重用都会很方便。
  

  接下来,我们具体的看一个例子,来了解一下模块化和插件化。

转载于:https://www.cnblogs.com/shalahu/archive/2013/02/21/2921418.html

OSGi.NET 学习笔记 [模块化和插件化][概念]相关推荐

  1. UI学习笔记---EasyUI panel插件使用---03

    UI学习笔记---EasyUI panel插件使用---03 UI学习笔记---EasyUI panel插件使用---03 1.panel简单小例子 ------------------- 2.可以自 ...

  2. 模块化以及插件化开发个人设计思路

    先解释下"模块化"与"插件化"的两个概念 1.模块化设计: 模块化设计,简单地说就是程序的编写不是开始就逐条录入计算机语句和指令,而是首先用主程序.子程序.子过 ...

  3. Apache Nutch 1.3 学习笔记十(插件机制分析)

    1. 一些对象说明 PluginRepository:这是一个用于存储所有插件描述对象(PluginDescriptor),插件扩展点(ExtensionPoint)和被激活的插件. PluginDe ...

  4. Verilog学习笔记-——Verilog模块例化

    Verilog学习笔记---Verilog模块例化 在一个模块中引用另一个模块,对其端口进行相关连接,叫做模块例化.模块例化建立了描述的层次.信号端口可以通过位置或名称关联,端口连接也必须遵循一些规则 ...

  5. opencv学习笔记之二值化

    opencv学习笔记之二值化 1.什么是二值化 二值化,从名词意义上可以看出来,是将一共物体转化成两个值.二值即:0或255.即一个白色一个黑色.即一个图片经过二值化之后会显示成白色和黑色的形式. 2 ...

  6. 【学习笔记】 科目一之概念篇

    [学习笔记] 科目一之概念篇 概念题方法 1)抓重点:科目一设计知识范围太广,不要妄想所有知识点都复习到,这是不可能的,我们的目标是45分几个而不是考高分,复习时间有限,所以要学会抓重点,比如法律条文 ...

  7. MySQL学习笔记02【SQL基本概念与通用语法、数据库的CRUD操作】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  8. SDN软件定义网络 学习笔记(1)--基本概念

    SDN软件定义网络 学习笔记(1)--基本概念 1. 定义 2. 提出背景 3. 体系结构 1. 定义 软件定义网络(Software Defined Network,SDN),顾名思义,SDN 与传 ...

  9. J2EE学习笔记三:EJB基础概念和知识 收藏

    J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...

最新文章

  1. YTU 3004: 栈的基本运算(栈和队列)
  2. flash mini播放器
  3. SQL Service自定义数据类型
  4. laravel 初识
  5. SiameseFC超详解
  6. php rsa aes混合加密,手动演示RSA和AES混合加密过程
  7. 《Java程序员职场全攻略:从小工到专家》连载九:散兵游勇还是团队作战
  8. 4.2 tensorflow2实现多总体位置参数趋势性检验——python实战
  9. mariadb 集群mysql_负载均衡的mariadb集群搭建
  10. html标签的英文全拼,HTML标签全称对照
  11. 逍遥天龙八部服务器技能修改,泣诉天龙八部3逍遥三大难 技能修改势在必行
  12. 2022中山大学计算机考研专硕初试经验分享
  13. 游戏 - PS4 海绵宝宝: 争霸比基尼海滩重注版
  14. 人脸检测(十五)--改进版VJ人脸检测(LBP特征,VISAPP2017)
  15. php gd库 缩小图片_【源码分享】PHP中GD库实现图片等比例缩放
  16. Vue实现仿微信,如飘柔般顺滑的页面转场动画
  17. latency延迟分析处理
  18. Jackson Western印迹检测分析物丨比色免疫印迹
  19. 2018-2019-2 20189212 《网络攻防技术》第二周作业
  20. Datax和Kettle使用场景的对比

热门文章

  1. 计算机网络—数据链路层的流量控制与可靠传输机制(思维导图)
  2. 强连通图------(1)通过两次DFS或BFS判断是不是强连通图
  3. Unity3D基础4:空物体与预制体
  4. 利用 opencv 中的 cv.Canny 函数快速进行图像边缘检测
  5. jquery系列教程8-jquery插件大全
  6. 均方根误差RMSE(Root Mean Square Error)
  7. python实现水仙花
  8. Crackme017
  9. hcna(华为)_Telnet篇
  10. day 5 名片管理系统-文件版