基于组件的.NET软件开发(1)

取名空间是啊

计算机科学领域受到凡是透过名字来以各种代码资源(变量和子程序)的,命名空间(namespace)则是团体这些资源的一律组符号,例如目录树是就硬盘上文件等的命名空间。命名空间的筹划目的是提供相同栽让同一组称及另外名目分隔开之方式。在一个命名空间受到声称的类似的名及其他一个命名空间被宣示的同之好像的号不闯。
苟你或无法获取命名空间的概念,你若想象让你一个1T之硬盘,但硬盘中无法缔造文件夹,只能添加文件,你就能体味单一命名空间的弊病了,你不能不管1T底硬盘上拥有文件的命名不能够再!这样您就是能自日常操作文件夹的经过被泛出命名空间这定义了。

据悉组件的.NET软件开发

 

独自命令空间

单身命名空间就是好收拾一模仿与目录树了独立的命名空间,通常这个命名空间是用户从定义之,也便是出于用户展示都随意地注明当前代码资源属于哪个命名空间,没有外约束,PHP5.3之后就运了这种做法。
这种方法新看会于丁带来混淆,已经发出同等模拟由目录树构成的命名空间了,你更好定义一仿毫无关系的初的之命名空间,你无厌累为?你分得干净呢?
自这种做法会带来不直观的瑕疵,但与此同时也出夫独到之处,比如当PHP的运状况中,PHP作为脚本经常夹在各种资源文件中,如果全用目录树构成的命名空间,往往会造成空间的荒废,同时受PHP的结构转换得老松懈,这虽老吻合由程序员自己定义一模拟独立的命名空间了。当然有PHP框架会强制要求命名空间和目录结构的一致性,这便是继言语了。

混语言开发

   
Java语言超平台的计划,是J2EE在铺子级系统面临占优势的第一原因,为了跟J2EE竞争,.NET
framework在计划系统布局及应用了子的设计模式,从而在争鸣及要跨平台化了恐(事实上,已发生真正可用之系,MONO就是运行在非Windows操作系统之上的.NET
framework),.NET设计师们还发现了J2EE的一个死穴——J2EE组件必须用Java语言开发!这种应用语言及之“独裁”无疑被喜爱其它语言的程序员们十分不喜欢。为之,.NET在软件开发史上篇浅当筹划软件运行平台时虽考虑到了混合语言开发,在作者看来,这真的是平赖影响深远的技术革命。

   
本文不打算到介绍.NET
framework中混杂语言开发的其中机理,而只是于利用角度,通过几独不足却独立的实例,来瞧我们什么样在一个工程被融为一体多种语言开发的.NET组件。

 

目树命名空间

纯命名空间明显是反人类的,需要规划来集体的命名空间。怎么规划呢?一个简单的思路是:既然代码由源文件组成,而来自文件同时被目录树组织,那命名空间是否直接行使目录树为?我觉得好,大家吧当好,于是就闹了目录树命名空间。
目录树命名空间就是直接利用文件称当代码资源极度小单位之讳,每个文件夹作为不同的命名空间,使用文件夹路径区分不同之命名空间。

采取目录树作为命名空间发出为数不少益处,比如:

  1. 淡雅的一致性
  2. 利用起来格外直观,哪个命名空间下产生哪东西,打开文件夹就能够望,一目了然
  3. 是因为文件系统保证了跟一个文件空间下不见面有文件重名,所以就算等价于保证了与一个命名空间下未会见发类似重名,等价于保证了跟名类一定生例外的命名空间,于是便保证了动用时必然生措施区分和名类

虽目录树这么好,但还是来语言不净依照目录树来走,甚至还产生了抛弃目录树作为命名空间的奇葩设计(其实为出该成立啦):独立命名空间。
用Java举例,Java可以划归为「类目录树命名空间」,因为有少数接触不同

  1. 直拿目录树作为命名空间好像不顶好实现,毕竟一个凡是文件系统中之物,一个凡运作环境被的东西,于是Java中尚用你以代码文件里展示地注明此文件属于哪个命名空间(包名),但她又展开强制性地检讨:你的命名空间注明得要跟文件夹路径一致!我心忍不住默默嘀咕这不是差不多之一举为,不过还吓现在底IDE在公建文件的时即便见面自动为您上加同长长的对的命名空间
  2. Java中代码资源的最小单位可说凡是近似了,但Java语言允许一个文件中加大多个像样(虽然只能一个public的),虽然这并无是建议做法

零件的重组

   
当我们要复用已有些组件的效果来出新系统时常,我们经常吃初出的机件简单地包容另一个早就有的组件,以达成代码用的意义,这种开发方式在面向对象设计理论被受号称“组合”。我们看看一个小例子:

   
我们设规划一个C#零件,其接口如图1所出示:

起名 1
图 1 C#组件的UML图示

   
打开VS.NET,创建一个C#类库工程:CSharpComponent,删除原有的Class1,往工程中上加一个新类CSharpClass,在里增加一个函数SaySomething,代码如下:

 

public
void SaySomething(string str)

        {

            MessageBox.Show(”
这是 C#兑现的力量,传入的字串是:”+str);

        }

    然后,从菜系中选择“生成”à“生成解决方案”,编译完成后会生成一个动态链接库:CSharpClass.dll。

   
现在,我们都发出了一个不过复用的软件组件,虽然它们的作用简直不值一提,但它的的确确是一个软件组件,在真相上和那些卖上几千美元的买卖组件并凭分。

   
在此处我们用明确:CSharpClass.dll实际上可以叫做组件库,而类似CSharpClass则可以当做是一个好复用的零件。显然,一个组件库(DLL文件)可以容纳多独零件(即完成某种意义的类似)。

   
接着我们又创一个Windows应用程序项目,但此时我们所以之不再是C#,而是VB.NET了。我们叫工程起名叫也:VBTestComponent,从工具箱中把一个按钮拖到窗体上,我们打算于用户单击此按钮时,让其直接调用C#组件   CSharpClass.dll中之SaySomething()方法,并起VB中传递一个字串给这方式。

   
为了能够下支付好的C#零件,我们务必叫VB工程长对CSharpClass.dll的援。在化解方案资源管理器窗口中之类型节点:VBTestComponent上右击,从弹有菜谱中挑选:“添加引用…”,将应运而生以下窗体:


2 添加对C#组件CSharpClass.dll的引用

   
单击“浏览…”按钮,找到CSharpClass.dll,确定后如若图2所展示。单击“确定”按钮关闭窗口,现在,我们就是为VB工程多了一个对C#零件的援,可以于解决方案资源管理器窗口被酷知地看来就点:

起名 2
图 3 添加了对C#零件引用后底“解决方案管理器”

 

   
后面的事体就是杀简单了,在按钮的单击事件受到开以下代码:

 

Private
Sub Button1_Click_1(……)
Handles Button1.Click

        Dim obj As
CSharpClassNameSpace.CSharpClass

        obj = New CSharpClassNameSpace.CSharpClass()

        obj.SaySomething(“我是由VB中调用C#组件中之法要产出的。
“)

End
Sub

 

   
OK,我们本即使贯彻了当VB中调用C#组件起名的功效,这简直太简单了咔嚓!

   
聪明的乃这脑瓜一定当转移了:既然从VB中得以这么容易地调C#组件,那么,反过来也肯定行。或者,我可开一个VB组件,然后,它同时调用一个C#组件,而C#零件又可调用某个C++开发的零部件,……,调来调去,浑然一体。当代愚公曰:“子子孙孙无穷尽为,何愁项目结束不化?!”

   
现在再次不要强迫所有程序员在一个型面临都为此平等栽语言了,尽可以给每人分配一个独自的零部件,让她们用自己喜爱的语言去开发,只要遵守事先定好之接口就尽了。

   
笔者想起过去动VB来调用Win32
API的惨状,不禁欢呼那种痛苦之光景一去不复返了!

作者Blog:http://blog.csdn.net/bitfan/

纯命名空间

尽管如此代码分布在不同的文本里,但是以运行时,所有的函数和好像都见面吃加载到外存里,此时大家还当一个篮子里,没有两样文件不同文件夹的格,如果此时每个接近或每个函数仍旧以她自身的名,这即于单一命名空间。
得设想,你要给和于1T硬盘里无法建文件夹同样的题材。
而或会见说,这尼玛怎么写代码,好名字就那基本上,取一个虽掉一个,哪来那么多名字让您沾,何况自己沾的讳随后还或忘记,就转变说若跟人口合作吧,岂不是冲得停不下来。
而实际上过多语言都是这么的,比如C,比如Object-C(还莫名其妙地当IDE里让您大兴土木一个跟文件目录树不同的新目录结构),比如5.3事先的PHP,这种情形下之一律栽通用处理措施是:自制命名空间。怎么个自制法?就是在起名的时在名字前增长前缀,完美。

 

命名空间分类

自拿当下不同语言中针对命名空间的计划性分为三类:单一命名空间、独立命令空间、目录树命名空间
率先我们领略,我们的代码都是出于来自文件组成的,而既然作为文件,那它就是处在某个文件系统中,而现在大部分底文件系统都用了近似目录树的组织来团文件之命名空间。

前言

   
随着软件技术的很快进步,现代的大型软件都普遍应用了基于软件组件的开发方式。以成熟的CBD(Component Based
Design:基于组件的网规划)理论也点,在针对系的分析与规划成就后,系统出体现吗复用已出组件、开发新组件和用持有组件装配起来的长河。J2EE大规模地用各种零部件构照复杂的庄信息体系,获得了光辉的打响。

   
作为后来者,.NET
framework汲取了J2EE的成功经验,在组件化开发方面具有好独到的统筹,在本文中,我们用介绍.NET组件化开发技术的极重点的片个层面:混合语言开发同组件反射。笔者有充分的理由确信读者以询问了.NET的兵不血刃组件开发成效后,一定会指向.NET
framework的规划以及开发者敬佩不已,并会见激发应用.NET来开发软件系统的明明兴趣。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图