动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > J2EE/J2ME教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ J2EE/J2ME教程 ]的信息

本月文章推荐
.使用JSR172解析XML.
.EnterpriseJavaBeans导论七.
.JDBC概述(二).
.如何实现j2me对话框.
.JavaMail快速入门-8.
.j2me内存优化.
.Javamail中附件中文名字乱码祥解.
.再议j2me进度条与线程化模型.
.JavaMail快速入门-3.
.菜鸟学jsp(三).
.基于J2EE的Blog平台.
.保护自己的MIDlet程序之三:SNPr.
.简析J2EE应用程序中数据库类的设.
.赛车游戏(二)一个Mascot Capsule.
.SAML简介:安全地共享数字身份信.
.最美的MVC,ORM方案-Ruby on Rai.
.在Spring中添加Bean.
.J2ME可选包—PIM介绍.
.J2ME游戏开发技巧:用setClip分割.
.JBOSS4.0 JDBC数据源配置大全(一).

J2ME客户端中的MVC结构介绍

发表日期:2007-12-23 |


MVC(Model-View-Controller)是一种经典的UI结构设计模式。MVC模式把应用程序或者应用程序的一部分划分为三部分:Model(模型),是应用程序的主体,包括事务逻辑;View(视图),代表了用户接口;Controller(控制器),它的任务是处理用户输入和系统事件,分配任务到模型服务并更新相应的视图。

MVC结构甚至在一个类也有不同的等级;这个结构可以根据不同的功能实现。下面有一些例子——从简单到复杂——将展示如何将所有都在一个类里的J2ME[awv1]客户端转换为一个集成了MVC结构的J2ME[awv2]客户端;三个类如何组织以及这些类里的功能如何分布。在每一种客户端类型中都会讨论该类型的利弊,这样可以帮助开发者选择合适的客户端类型。

所有代码在一个类中的客户端

概念很简单:就是把所有的代码都放在一个类里,包含startApp()、pauseApp()、destroyApp(),像HelloWorld例子。我有时这样编写代码,来测试手机的特征,但是仅此而已。当然不称之为一种模式,但是它让我们理解如何从正开头产生一个MVC模式。

//Code example, items shared in different views

public void commandAction(Command cmd,Displayable disp)

{

if(cmd == getCommand &¤tView==mainForm) then

{. }

else if(cmd == getCommand &¤tView==listForm) then

{ . }

else{.}

}

利:

代码长度最短,因为如果把抽象它们为方法,就没有重复的代码。事实上,一些条目可以在不同的视图中共用。

弊:

视图越多,类的结构就变得越复杂,控制逻辑中跳来跳去的样式会使多数开发者感到混淆。

基于视图的组件


    基于视图的组件实现类的方式是:应用程序的每一个视图(或者几个类似的视图)被设计成一个类;在一个类中,MVC结构可以根据不同的功能实现。

     J2ME客户端中的MVC结构介绍(图一)

图1 基于视图的组件类图

public class LoginComponent extends ViewComponent implements CommandListener {

public Display display;

// View related functions

public Displayable getView( … );

public Displayable prepareView (){ … }

public void showView() { … }

// Model related functions

Public bolean loginService(String name, String passWord){

}

// Controller

public void commandAction(Command c, Displayable s){

}

}

利:

结构简单直观;它由屏幕视图组成,并且易于开发者理解。通过超类,我们可以把一些公共的接口放在其中,代码的代码重用性会更高。


弊:

一些基于视图的组件可能有相似的功能;这使得在不同的类中代码重复。重复代码是类设计的臭味,它使应用程序变得难于管理。

Model-View
       
Model-View结构是对于J2ME[awv3]客户端最普通的结构。实体数据和业务逻辑功能作为模型类实现。
J2ME客户端中的MVC结构介绍(图二)

图2 视图-模型结构类图

// View example, use form as super class of a view

class UnitView extends Form implements CommandListener{

private LoginEngine engine;

private String result;[awv4]

UnitView(String name; LoginEngine engine){

Super(name);

this.engine = engine;

}

String login(String name, String password){

result=model.getService(name, password);

}

}


//Model example

class LoginEngine{

public String getService(String name,String password){

return result;

}

}

利:

两个或者更多视图对象可以共用一个模型的功能;从不同类里抽象类似的代码。

弊:

这种结构的缺点是事件处理函数和屏幕流程逻辑分布在不同的视图中。因为每一个视图需要管理和其他视图的关系,如果我们有N个视图单元,每一个保持一个和其他视图的关系,就有N*(N-1)关系链,但是对于一个中间者,就只有N关系链。

单个控制器MVC

    单个控制器,也称系统控制器,负责接收和处理所有的系统事件。正常地,控制器将分配大量的工作到模型,控制屏幕流程,处理和分发系统事件。在Sun著名的J2ME[awv5]蓝图——Smart Ticket中,一个大型交换函数被用来作为单个控制器的核心。
J2ME客户端中的MVC结构介绍(图三)
          图3 MVC模型类图
J2ME客户端中的MVC结构介绍(图四)
                 图4 MVC对象的时序图

// login view

public class LoginView extends Form implements CommandListener{

Controller uniController;

Display display;


MVCMidlet mvcMidlet;

TextField userNameField;

TextField passWordField;

Command loginCommand;

public LoginView(String title){

super(title);

uniController=Controller.getInstance();

this.append(userNameField);

this.append(passWordField);

this.addCommand(loginCommand);

}

public void prepareView(Display display){

setCommandListener(this);

this.display=display;

}

public void showView(){

display.setCurrent(this);

}

public void commandAction(Command c, Displayable d){

if(c==loginCommand){

Event event = new Event();


event.setByName("userName",userNameField.getString());

event.setByName("password",passWordField.getString());

uniController.handleEvent(Event.LOGINEVENT,event);

}

}

}

//Controller

public class Controller {

private static Controller instance;

private Display display;

private LoginEngine loginEngine;

private HomeView homeView;

private LoginView loginView;

private ErrorView errorView;

...

private Controller() {

...

}

public void init(MIDlet midlet){

this.display = Display.getDisplay(midlet);

...


}

public static synchronized Controller getInstance(){

if(instance == null){

instance = new Controller();

}

return instance;

}

public void handleEvent(int eventID, Event e){

switch(eventID){

case LOGIN_EVENT:

String passWord = e.getByName("password");

String userName = e.getByName("userName");

Boolean result = loginEngine.loginService(userName,password);

if(result==true){

homeView.prepareView(display);

homeView.showView();

}

else{

errorView.prepareView(display,"loginError");

errorView.showView();

}

break;


}

}

}

//login model

public class LoginEngine {

public boolean loginService(String userName, String passWord){

boolean result = …

return result;

}

}

利:

在标准的MVC结构,业务逻辑(model)、表现逻辑(view)和事件处理逻辑(controller)被很好地划分。一个部分的修改和其他部分相隔离。这使得整个应用程序可扩展性和可升级性提高。

弊:

随着应用程序大小的增加,越来越多的页面流逻辑都集中在了一个控制器中。这个控制器变得很大和难于管理。也许是时候把它分成几部分了。在模型、视图和控制器中的严格分离使得它更加难于调试和测试。

多控制器MVC

    多控制器结构通常基于用例,也就是说,一个控制器只处理一个或者几个相关的用例事件。随着单个控制器的划分,整个应用程序可能被划分成几个具有相似结构的包。对于企业级应用程序来说,这个结构是很典型的,但是很少在J2ME[awv6]应用程序中使用。
J2ME客户端中的MVC结构介绍(图五)

图5 多控制器MVC结构对象图


利:

通过多控制器结构,控制器变得容易管理,并且应用程序可以被划分成几个部分,然后分配给几个开发者。

弊:

随着类、对象和文件数量的增加,它们之间的交互机制变得更加复杂。

总结

    集成的MVC结构要求谨慎地设计和计划,你必须花费足够的时间来考虑不同部分间的交互机制。J2ME[awv7]客户端有它自己的特征:应用程序在大小上通常很小,可用资源有限。由于小屏幕尺寸,J2ME[awv8]应用程序更愿意替换一个视图而不是修改。最好的设计选择就是最适合应用程序要求的,而不是具有最好结构的。

(出处:http://www.knowsky.com)


上一篇:3D数学知识简介 人气:958
下一篇:M3G游戏中性能提升技巧 人气:652
浏览全部J2EE/J2ME的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-12-1 MyBB v1.4.4 简体中文版 bulid 2
2008-12-1 新云网站内容管理系统 v4.0.0.11
2008-12-1 网趣网上购物系统时尚版 v8.8
2008-12-1 Textpattern v4.0.7 多国语言版
2008-12-1 Piwik ( PHP统计系统,可以和GOOG
2008-12-1 天空网络电影系统SKYUC! v2.6.2
2008-12-1 SiteDynamic企业网站管理系统 v1
2008-12-1 KindEditor HTML在线编辑器 v3.0
2008-12-1 0451sky高校教务管理系统2008 v4
2008-11-29 Tencent Traveler 4.4
2008-11-29 龙卷风网络收音机 v3.0.0.0
2008-11-29 Intel Chipset Software Install
2008-11-29 TweakVI 1.0 Build 1100
2008-11-29 Opera 9.62 Build 10469
2008-11-29 MPlayer WW编译版 SVN-r28044(20
2008-11-29 NetTools网络工具v1.0.0破解版
2008-11-29 3DGallery三维体验1.1破解版
2008-11-29 SecretBook保密本v1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | OPEN参数生成器 | 弹出式窗口代码产生器 | 密码登录生成器 | 在线按钮生成器 | Meta标签生成器 | 多色彩特效字代码生成器 | 网页代码调试器 | 在线FTP登陆 | Flash取色器 | 配色代码对照表 | 配色辞典 | CSS生成器 | 广告代码 | 框架网页代码生成器 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | 在线调色板 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 元素周期表 | 健康查询 | 世界时间 | 万年历 | 二十四节气 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2009 www.knowsky.com All rights reserved | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成