JAVA网页编程之用Qi4j举行面向组合编程仓酷云
其实你不用Struts,spring这些工具,直接用jsp,servlet能够很方便地写出来,而且,可以根据个人的水平、爱好,有很多方案。而struts,spring这些工具的出来。临时以来,经由过程OOP对象集对范畴观点举行建模的方针并未失掉充实完成。那末迄今为止,我们万般勉力但难以办理的基本成绩究竟是甚么?有无更好的办理举措?在本文中我们将先容面向组合编程(COP,CompositeOrientedProgramming)的观点,展现它怎样躲避OOP存在的一些成绩,偏重先扑灭利用可重用部件组装范畴建模的但愿。成绩
我为什么物?实践中我能够有多重身份。某些时分,我是编写软件的开辟者;另些时分,我是给人人解说某个有关Java话题的软件开辟者。但其他时分,我大概有完整分歧的身份,好比银行的客户、年夜学的校友。简而言之,我分歧时分的身份,由事先的详细情况决意。在分歧的情况中,我必要经由过程分歧接口、以响应举动与之交互。在一切这些情况中,我实在就是具有分歧接口统一个对象。在我编写软件的时分银行不会呈现另外一个我。
办理计划
假如在软件顶用OOP为我建模,一些人会将我计划为一个Developer类。但如许一个类明显不克不及在分歧时分表达我的分歧身份(好比一个年夜黉舍友,由于Developer类不包含交际观点)。因而对我建模的了局,大概会是几个分歧的类,大概在一个类中完成一切举动。在本文中,我们提出另外一种计划:使用Mixin(混进)观点完成这个完成。
组合
起首,Mixin被完成为一个一般Java类,它一般完成一个特定接口,而这个接口将是Composite所要表露接口的一部分。接着,我们用以下办法声明一个Composite:创立一个Java接口,用注解声明它要用到的Mixin,而且利用“extends”关头字指明需表露哪些范畴接口。经由过程这一办法,我们就能够载一个会合的地址明白界说Composite的布局和举动。
利用COP时,固然把横切存眷点保存在自力的完成类中是一个不错的主张,可是它们的拆卸或构成体例应当仍是会合用Java接口来讲明。为了不呈现反复的申明,我们能够经由过程“extends”关头字重用被扩大接口中的声明。如许,假如修正了被扩大接口,从其扩大而来的Composite接口声明就会主动改动,不需我们逐一做野生修正。
使用这类举措,我们信任能够做到一举两得:存在于各个独自完成类中的存眷点完成了分别,每一个类仅需存眷特定的义务;关于Composite终极应当是甚么样的形貌则是会合和断定的,如许,Composite的开辟者就能够全权卖力界说中应当包括的内容。
代码示例
Composite在实践中怎样详细使用呢?让我们看一个例子。假定我是一个Composite,那末可以下形貌我:
@Mixins({DeveloperMixin.class,SpeakerMixin.class,AlumniMixin.class})publicinterfaceHumanCompositeextendsDeveloper,Speaker,Alumni,Composite{}被扩大接口中包括了实践要被挪用的办法,由Qi4j运转时情况往机关一个Composite实例,这一实例能够将“来自客户真个挪用”路由给特定的Mixin实例。但从客户真个角度看,这个Composite实例完整是一个一般Java对象(只管与一般OOP办法完成的范畴对象对照起来,它有更多的接口)。像Developer如许的范畴接口是一般接口,和Qi4j无任何特别干系,实在现自己也是完成了该接口的复杂Java类。可是下面所说的范畴对象的身份是由Composite实例而非某个Mixin实例界说的,如许就办理了身份成绩:对“我”这个对象的援用,可在体系局限里传送,并被传送给在特定高低文情况中很有效的接口。假如引进更多范畴或高低文情况时,也可经由过程扩大这个Composite来处置。
如需想创立另外一个也利用Alumni接口的Composite及实在现,我们可让此接口也扩大Alumni,并声明利用不异的Mixin。因而,多重承继和复用基本类的罕见成绩也办理了。
LMM布局
软件一般是在纸上分模块、分层举行计划的。我们对相似以下的计划图已十分熟习了:
<br>
这个图包括有多个模块,分歧模块组成了分歧层,而各层又叠放在一同。我们可将这类计划办法简称为LMM(LayeredModulesMetaphor,分层模块暗示法)。LMM图可用来转达一个全体使用的总括,不让我们堕入太多的细节傍边。严厉依照LMM的请求计划体系,可削减体系缺点、下降临时保护本钱,这类体系对将来变动的反应也可更加天真。尽年夜多半项目都利用LMM来形貌使用程序的组成体例,很多项目想法遵守LMM,但只要很少的项目是按此实行的。我想我们都已看到过良多凄惨教导,好比在基本布局层的类中间接利用Web层的类。
Qi4j撑持的布局
Qi4j今朝已能为LMM供应明白的撑持,这有助于标准团队中开辟职员的举动。Qi4j使用布局是一个小划定规矩集:
[*]布局
[*]一切布局在使用启动时静态声明
[*]一切Composite实例都有所属模块
[*]一切服务都有所属模块
[*]一切模块都有所属层
[*]一切层都有高低条理干系(但不轮回)
[*]一切层一同组成了使用
[*]会见
[*]模块能会见同层的一切其他模块
[*]层能会见它的间接上级层(不克不及跃层会见)
[*]可见性
[*]Composite实例缺省只在所属模块内可见
[*]Composite实例也能设置为在层内或层间可见
看起来对照庞大,实在否则。实质上,Composite实例在创立它们的模块中都是公有的,除非显式声明为对模块外或层外公然。这和在一般Java中利用“public”和“pirvate”润色词限制类的可见性是相似的。
Qi4j今朝尚不供应其他可供选择的布局,但其包括了机关经常使用使用程序布局的复杂办法(包含一个层中只包括一个模块的情形)。
布局的利用
范畴代码无需懂得使用程序布局,但能够用@Structure注解的情势呈现。以下例所示:
<br>
CompositeBuilderFactory将在创立时被注进Mixin,并且它仅同意代码实例化布局中可见的Composite。
布局发扬感化的另外一个罕见例子产生在查找服务时。若在不异模块中有且唯一一个请求范例的服务,那末就无需引进分外拆卸(Assembly)。服务的利用变得非常复杂。
<br>
比方,假如服务GenericInventory被声明在Bread模块中,那末每一个inventory服务虚例都将受其临近各自客户真个水平束缚。
使用布局的天生
Qi4j使用需经由过程使用程序代码完成自举,最复杂的启动办法大抵以下:
<br>
别的,还可使用SingletonAssembler编写上述功效:
<br>
SingletonAssembler是一个用于创立单层单模块Qi4j使用程序的工具类。
<br>
newApplication()办法也可吸收Assembly[][][]范例的参数,由此可创立“千层饼式”分层布局的使用情况(除第一个和最初一个层,其他都有相邻的上、上层)。比方:
<br>
下面代码完成的布局以下图示:
<br>
最初,假如使用程序布局非常庞大,还可将ApplicationAssembly实例作为参数传送给newApplication()办法。ApplicationAssembly用相似迭代的情势创立全体LayerAssembly,再为每一个LayerAssembly创立ModuleAssembly。举比方下:
<br>
运转下面代码可失掉以下布局:
<br>
布局化的优点
经由过程代码显式完成使用程序布局有两个明显的优点:
[*]就近会见。
[*]架构强迫实行。
这意味着,越近的Composite优先级越高,越易会见;内部不克不及会见模块或层内公有的Composite。由于服务被完成为Composite,其剖析办法更加委婉,必要的拆卸设置也少很多。
Qi4j布局观点的另外一个风趣的地方在于每一个使用都有一个静态布局组合,它能够经由过程工具来抽取并展现,而不用独自保护。这使得架构师、计划师或团队卖力人可轻松跟踪开辟职员对架构的遵守情形,很简单找到越轨者。
总结
本文经由过程完成于Java平台的Qi4j,扼要会商了COP的可行性。我们看到以传统OOP看法完成对象的Composite,是怎样更好分别存眷点(concerns),从而提拔代码的质量和复用性的。别的,我们也会商了显式建模使用布局的思绪,这一布局一般只在纸面上而不是在代码中界说。经由过程显式建模使用布局,我们能够更简单落实架构实行并打消服务间的互相依附。这将匡助我们创立更年夜范围的体系,并且跟着引进愈来愈多的组件及服务,我们的体系不至被其本身的“分量”压垮。
最初要夸大的一点是,COP和Qi4j中的尽年夜多半理念并不是前无前人。我们如今做的,恰好是在后人编程理论和各类框架中寻觅各类优异的头脑和形式,并提炼出那些我们以为在编写软件及坚持简单了解且易于保护方面都能给开辟者供应匡助的内容。不管是开辟软件仍是我们的一样平常生存中,将陈旧的工具使用于新的情况都长短常主要的。
作者简介
Rickard J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。 Java 编程语言的风格十分接近C、C++语言。 http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。 你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。 如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。 Java 编程语言的风格十分接近C、C++语言。 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。 你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。 一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。 是一种使网页(Web Page)产生生动活泼画面的语言 接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。 是一种突破用户端机器环境和CPU 还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。 http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。 任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言 Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站 应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
页:
[1]