山那边是海 发表于 2015-1-18 11:35:43

JAVA网页编程之MVC形式在j2me项目中的使用(一)

由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划。就在Oak几近失败之时,随着互联网的发展,Sun看到了Oak在计算机网络上的广阔应用前景,于是改造了Oak,项目MVC形式在j2me项目中的使用(一)
FavoYangEmail:favoyang@yahoo.com接待交换
Keywords:MVCj2meUI形式

内容提纲:
本文扼要的先容了MVC形式的头脑,并剖析了MVC形式的利害,最初分离MIDP平台给出几种罕见的MVC形式理论。信任此文对任何一个利用midp平台的商务程序开辟者都或多或少的有所匡助。

版权声明:
本文同时宣布在www.j2medev.com和我的Blog(blog.csdn.net/alikeboy)上,假如必要转载,有三个路子:1)接洽我并经我批准;2)和www.j2medev.com有转载文章互助协定的3)经由过程Rss聚合我的Blog。别的网上转载必要全文转发(包含文章的头部的声明),不要断章取义。

注释:

初识MVC形式
第一次熟悉到MVC形式是从MicrosoftMFC框架所接纳的“文档-视图”模子入手下手的。第一次打仗到这个观点让我镇静不已,很长工夫困扰我的程序框架成绩仿佛水到渠成了。尔后我翻阅了GOF一书中对MVC形式的形貌,促进了对这个形式的一些了解。应当说MVC框架是程序计划范畴的常青树,也是GOF形式中最为主要的形式之一。这一典范的形式被普遍的利用,有太多的程序构架在这一框架之下,从初期的卓面Application到如今盛行的Web。并因各自的需求分歧,MVC有了良多的变种。懂得MVC是每一个程序计划职员的?课,最好可以到达纯熟使用的水平。

我其实不盘算具体先容这一形式,由于细节对照庞大,我口舌笨拙也不简单说分明,人人应当参阅一下有关形式的书本,任何一本都比我要讲的分明。以是此处就一带而过。MVC形式是Model-View-Controller的缩写,中文译为“模子-视图-把持器”。MVC的中心头脑是分别。Model就是对实体类的笼统;View就是Model在屏幕上的暗示;Controller就是和谐者。大概有伴侣发明Controller的形貌几有些含混,不要发急,这个一会还要谈到。也许由于太甚着名,MVC形式的每一个完成都出处很年夜,但他们却都叫做MVC!!弄得初学者一头雾水。常常滥用,最初弄得M.V.C.三者之间的和谐很凌乱。这实在并非他们的错,理清思绪的关头仍是方才提到的一个词“分别”。只管MVC完成分歧,可是头脑是分歧的。

MVC形式的利与弊
先谈长处:
1)将M.V.C.分别可让分歧的专家卖力分歧的模块,一样平常情形下,M部分由熟习数据库,收集传输的专家来卖力;V则交给对UI有研讨的专家。这关于项目标办理者而言是何等的诱人,合作意味着能够进步效力并能够依照传统的义务分别来处置软件开辟历程。对开辟者而言也能够用心于一个范畴。如许做的条件是接口要明白,MVC的分别头脑正为其供应了基本。
2)一旦V的部分产生变更,能够敏捷的重构而不用引发全部工程的返工。现在的软件体现层的部分变更其实是太快了…
3)M的部分,由于充足笼统,能够便利的反复使用,切合OO的头脑。另外一方面我们能够使用JUnit等单位测试工具对M举行测试,包管工程质量。

谈完了长处再来看看弱点:
1)使用MVC形式(也包含近代的其他一些形式)表示我们经由过程多发生一些类,来进步程序的可读性与强健性。附带来的弱点就是类的数目的收缩。说句笑话,MVC就仿佛是发面时用的速效粉一样,是最为便利的代码收缩剂,信任人人都深有体味:)
2)MVC固然界说了M.V.C.个个部件的寄义,但其实细,并且没有十分明白的流动三者之间的接洽。以是一向以来除View没有争辩外,其他方面都有良多争辩,人人都想把本人的了解作为正解。特别是“Model究竟是屏幕数据的汇合仍是实体数据”、“把持器的感化”是两个常常争辩的成绩。后面提过MVC变种良多,这也给初学者留下了很多的圈套。前面分离实例将会剖析几种罕见的做法。
3)MVC的完成本钱偏高。但请注重是这是绝对的,一样平常而言项目越年夜,越能够看出其上风。


罕见的MVC形式理论
上面将会先容在midp平台几种罕见的理论,最初是我习气的做法

M―V情势(大概MC―V、M―VC)

这也是在j2me中一种习用的办法,精华精辟的说这类办法是以屏幕为构造单元的,因此很合适RAD工具的开辟思绪。一个屏幕及其把持被笼统成一个VC类,而这个类中有一个公有的Model对象来代表屏幕上要用到的数据元素。屏幕对象其实不保留任何的实体数据,这些数据被构造在了Model对象中。也许由于屏幕对象很直不雅,把持器的感化也不了了(它尽年夜部分的功效被view或是model代替,详细取决于你的完成),以是也经常称号为model-view形式。情势以下:
classMyFrameextendFrame{
privateModelmodel;
privateStringItemname;
MyFrame(Modelmodel){
this.model=model;
name=newStringItem(model.getName());//哀求模子的数据
append(name);
}
}

classModel{
privateStringname="M-Cpattern";
publicStringgetName(){//这是一个服务接口
returnname;
}
}
下面看到的是个典范的M―V模子,我们能够了解这类以屏幕为中心的分别的寄义。Model构造起屏幕的数据,view向Model索要其但愿显现的数据,注重这一操纵必定要经由过程事后协商好的接口会见,而不是间接操纵。假如呈现庞大的事件逻辑(用户选择的某种操纵),有人将其放在Model端,也有人放在View端,但一样平常上放在Model端,这时候Model带有严峻的Controller的色采。

这类情势的长处长短常的直不雅,也无限的分别了显现和数据。假如常看j2medev.com站长Mingjava的文章,能够看到年夜部分他写的例子都是这类形式。而且这类形式也经常用于RAD工具。

这类形式的弱点是它与RAD工具一样勉励你从屏幕入手下手思索成绩,这常常让你堕入RAD的圈套――不先思索事件的流程,而是从用户接口间接动手往剖析成绩,这常常抹杀了你的全局构想。

Sunblueprints:SmartTicket中利用的MVC形式

出名的蓝图程序SmartTicket中利用了MVC形式,而且这一形式匡助Sun的程序员在MIDP2公布时,疾速的将SmartTicket的view部分从MIDP1.0更新到MIDP2.0。

Sun针对MIDP的特性,计划并改善了这一形式,在SUN的办理办法中是一个很尺度的办法,只是Controller酿成了一个伟大的事件处置器,一切由UI对象搜集到的用户的需求都转发给Controller处置。Controller外部保留了一组常量。在一个dispose(intid)情势的办法里一个伟大的switchcase语句依据对照分歧的常量,处置分歧的哀求。这类手艺偶然也将Controller称为处置器,大概屏幕导航器。这类形式的提出者次要是要会合处置j2me里频仍的画面导航。

良多人都以为,在j2me中将Controller改革成伟大的事件处置器是一个很好的办法。我对此持保存定见。

iFeedback中简化的MVC

为了年夜年夜削减类的数目,iFeedback的作者,将MVC封装到一个类中,用分歧的办法来代表对这三者的分别,这类举措证实对削减类的数目又很年夜匡助。
publicabstractclassMVCComponentimplementsCommandListener{
//Setfromoutsideatbeginning
publicstaticDisplaydisplay;

//Returnsthescreenobjectfromthederivedclass
publicabstractDisplayablegetScreen();

publicDisplayableprepareScreen()throwsException{
if(getScreen()==null){
initModel();
createView();
}else{
updateView();
}
getScreen().setCommandListener((CommandListener)this);
returngetScreen();
}

publicvoidshowScreen(){
try{
display.setCurrent(prepareScreen());
}catch(Exceptione){
e.printStackTrace();
Alerta=newAlert("Errorinshowingscreen");
a.setTimeout(Alert.FOREVER);
display.setCurrent(a);
}
}

//Initialize.IfadatamemberisnotbackedbyRMS,makesure
//itisuninitilzed(null)beforeyouputinvalues.
protectedabstractvoidinitModel()throwsException;

protectedabstractvoidcreateView()throwsException;

protectedabstractvoidupdateView()throwsException;

publicabstractvoidcommandAction(Commandc,Displayables);

}
由于都在一个类内里,你在也不用被MVC三者之间的干系费心了,这类退步的做法,是对MIDP无限资本的让步。

我的习气做法

上面分离我对MVC的了解和人人交换一下。我利用的是一种UML尺度的做法,最年夜水平上对的表现分别的头脑。起首和人人交换一下辞汇表:

View代表屏幕。
View经由过程事后约定好的接口向Controller索要数据,View同时搜集用户的输出,View其实不处置这些输出,而是依据分歧的输出回调Controller分歧的办法。一般View的子类利用UI后缀。

Controller把持器
供应View挪用的接口,卖力和model交换。把持器和View配合担当起和用户交换的感化。

Model泛指一系列的实体对象
必要注重的是我了解的Model并非屏幕数据的构造单元。Model代表一系列的实体对象。由Controller跟Model交换。我以为RAD工具中经常将Model代表屏幕数据的汇合正式招致MVC观点凌乱的一个缘故原由。RAD工具中Model,大致相称于这里的Controller所起的感化。

把持器其实不老是接洽着Model,偶然只是依附干系。而且Controller常常经由过程Model的对应的性命期类来取得Model对象。在这类情势中,层层断绝,View与Controller严密相连,而Model有很高的自力性,能够很好的重用。

一样平常的分离UML计划的历程,对MVC的各个类有响应的定名习气。
View称为Boundary类(界限类)以UI开头
Controller称为Controller类(把持类)以Workflow开头
Model称为Entity类(实体类)以Entity开头大概没有尾缀
Model对应的Lifecycle类(性命周期类)以Locator开头

界限类和把持类的基本类以下
BaseView.java
/**
*@authorFavo
*
*视图类
*/
publicabstractclassBaseView{

publicabstractDisplaygetDisplay();

/**
*复杂的前往包装的屏幕对象,不要做任何筹办屏幕的操纵!
*/
publicabstractDisplayablegetScreen();

/**
*创立屏幕
*/
protectedabstractvoidcreateView()throwsException;

/**
*更新屏幕
*/
publicabstractvoidupdateView()throwsException;

/**
*前往把持器
*/
publicabstractBaseControllergetController();

/**
*筹办屏幕
*前往筹办好的屏幕对象
*/
publicDisplayableprepareScreen()throwsException{
if(getScreen()==null){
createView();
}else{
updateView();
}
returngetScreen();
}

/**
*显现以后屏幕
*/
publicvoiddisplayScreen(){
try{
getDisplay().setCurrent(prepareScreen());
}catch(Exceptione){
e.printStackTrace();
Alertal=newAlert("Error",e.toString()+
+e.getMessage(),null,AlertType.ERROR);
al.setTimeout(Alert.FOREVER);
getDisplay().setCurrent(al);
}
}

}

BaseController.java
/**
*@authorFavo
*
*把持类
*/
publicabstractclassBaseController{
publicabstractBaseViewgetView();
publicabstractvoidsetView(BaseViewview);
}


注重到这些基本的类并没有向MFC框架那样发生完全的框架,而是计划成了笼统类,一来但愿强制人人完成笼统类(避免堕落);二来但愿增添一点天真性。以是两个类之间的通讯就要靠人人撰写的子类的机关函数了。一样平常我的习气是,初始化好把持器,然后将把持器作为参数传给界限类的机关函数,由界限类的机关函数往返调把持器的setView()来完成的。这些步骤是必定要有的,否则会NULLpointerExcpetion哦。

只管实际上大概很明晰,但理论带来的庞大性是惊人的。这恰是软件开辟的成绩,太多的细节困扰这开辟者对年夜局的掌控。本文接上去,将分离最初这类计划头脑,给出一个完全的计划实例。匡助人人从理论的角度了解使用这一形式。敬请人人等候。


从一个编程语言的普及程度来将,一个好的IDE是至关中要的,而现在的java的IDE虽然已经很好了,但是和.net比起来还是稍微差一些的,这是个客观事实。java要想普及的更好。DE是必须加以改进的。

若天明 发表于 2015-1-21 10:41:32

你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?

透明 发表于 2015-1-25 23:31:19

接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。

海妖 发表于 2015-1-26 05:04:40

Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)

兰色精灵 发表于 2015-2-4 13:10:55

Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。

小女巫 发表于 2015-2-9 23:07:48

如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。

变相怪杰 发表于 2015-2-11 19:16:46

当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?

愤怒的大鸟 发表于 2015-2-26 03:10:10

是一种突破用户端机器环境和CPU

金色的骷髅 发表于 2015-3-8 11:33:15

至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。

简单生活 发表于 2015-3-11 20:05:44

Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)

仓酷云 发表于 2015-3-18 07:22:29

《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。

小魔女 发表于 2015-3-19 01:25:19

如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。

活着的死人 发表于 2015-3-25 08:19:54

象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。

不帅 发表于 2015-3-26 11:11:15

你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?

蒙在股里 发表于 2015-3-27 00:46:50

你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。

第二个灵魂 发表于 2015-3-27 11:11:08

如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。

深爱那片海 发表于 2015-3-28 02:20:42

J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。

谁可相欹 发表于 2015-4-2 18:38:49

你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?

乐观 发表于 2015-4-10 08:13:24

如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。

莫相离 发表于 2015-4-16 12:09:30

你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
页: [1] 2
查看完整版本: JAVA网页编程之MVC形式在j2me项目中的使用(一)