亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

J2ME客戶端中的MVC結構介紹

2019-11-18 16:13:08
字體:
來源:轉載
供稿:網友

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.49028c.com)



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产一区二区激情| 日韩av资源在线播放| 国产精品一区二区电影| 国产日韩欧美91| 成人a在线视频| 黑丝美女久久久| 91干在线观看| 亚洲国产天堂久久国产91| 日韩美女免费观看| 综合av色偷偷网| 国产精品欧美日韩| 久久成人人人人精品欧| 亚洲色图狂野欧美| 91精品国产高清久久久久久久久| 欧美综合一区第一页| 亚洲福利小视频| 欧美成人激情视频免费观看| 国产精品大陆在线观看| 日韩中文字幕在线播放| 亚洲成年网站在线观看| 亚洲免费视频在线观看| 欧美视频在线免费| 欧美国产日韩精品| 91久久精品日日躁夜夜躁国产| 欧美激情精品在线| 综合久久五月天| 亚洲国产精品久久精品怡红院| 国产精品久久久久久久久久久久久久| 久久久久久久久久久亚洲| 久久国产精品影片| 97香蕉久久夜色精品国产| 色狠狠av一区二区三区香蕉蜜桃| 疯狂做受xxxx高潮欧美日本| 51精品国产黑色丝袜高跟鞋| 欧美最猛性xxxx| 国产精品美女免费| 欧日韩在线观看| 日韩欧美精品网站| 国产成人jvid在线播放| 美女久久久久久久| 91亚洲精品久久久| 一区二区三区久久精品| 亚洲天堂2020| 国产一区二区丝袜高跟鞋图片| 亚洲精品中文字幕有码专区| 欧美日韩视频在线| 国产视频精品免费播放| 日韩高清欧美高清| 国产97色在线| 伊人伊成久久人综合网站| 亚洲男人天堂古典| 色综合天天狠天天透天天伊人| 国产精品露脸自拍| 亚洲性视频网站| 亚洲国产高清自拍| 国内精品久久久久伊人av| 国产91色在线|| 国产成人一区二区三区小说| 精品久久久一区| 欧美成在线视频| 国产欧美日韩综合精品| 欧美日韩国产在线| 日韩亚洲第一页| 国产精品吹潮在线观看| 成人伊人精品色xxxx视频| 国产中文日韩欧美| 久久99久久99精品中文字幕| 91情侣偷在线精品国产| 欧美午夜电影在线| 国产精品高清免费在线观看| 亚洲精品国产电影| 国外成人免费在线播放| 97色在线视频| 久久97精品久久久久久久不卡| 九九九久久久久久| 91久久国产精品| 456亚洲影院| 亚洲91精品在线观看| 日韩在线视频观看| 情事1991在线| 国模叶桐国产精品一区| 黄色精品一区二区| 国产aⅴ夜夜欢一区二区三区| 国产精品老女人视频| 韩国三级电影久久久久久| 国产精品av免费在线观看| 国产欧美在线视频| 亚洲人成伊人成综合网久久久| 欧美一性一乱一交一视频| 久久久久久中文字幕| 成人福利在线观看| 91网站免费看| 国产成人精品免费久久久久| 日韩精品中文字幕在线| 日本高清久久天堂| 亚洲国产精品视频在线观看| 久久噜噜噜精品国产亚洲综合| 91精品国产九九九久久久亚洲| 国产精品综合网站| 日韩成人黄色av| 国产精品久久久久久婷婷天堂| 亚洲欧美日韩直播| 不卡av日日日| 精品国偷自产在线视频99| 欧美成人精品三级在线观看| 欧美精品在线观看91| 欧美激情成人在线视频| 日韩美女视频免费看| 亚洲视频自拍偷拍| 欧美精品激情blacked18| 国产精品吊钟奶在线| 亚洲wwwav| 欧洲精品在线视频| 久久久久久国产精品三级玉女聊斋| 北条麻妃99精品青青久久| 亚洲国产天堂网精品网站| 色综合久久88色综合天天看泰| 国产精品日韩电影| 亚洲免费电影在线观看| 久久精品视频在线观看| 91视频免费网站| 午夜精品久久久久久久久久久久| 亚洲欧美日韩成人| 久久久国产视频| 久久精品亚洲一区| 欧美性xxxxx极品| 57pao成人国产永久免费| 日本在线精品视频| 日韩av在线免费看| 精品久久久久久久久久| 欧美肥婆姓交大片| 久久99青青精品免费观看| 欧美重口另类videos人妖| 欧美日韩亚洲成人| 欧洲亚洲妇女av| 国产三级精品网站| 在线视频一区二区| 97人人模人人爽人人喊中文字| 精品久久久香蕉免费精品视频| 国产在线观看精品一区二区三区| 亚洲欧美制服第一页| 国内伊人久久久久久网站视频| 狠狠色狠狠色综合日日五| 永久免费精品影视网站| 国产精品人成电影| 亚洲成人精品视频在线观看| 亚洲精品日产aⅴ| 亚洲小视频在线观看| 久久av中文字幕| 国产日本欧美一区二区三区在线| 久久伊人精品视频| 久久久综合免费视频| 91在线|亚洲| 久久久久久亚洲精品不卡| 亚洲999一在线观看www| 久久精品国产一区二区电影| 91网站在线免费观看| 成人国产精品久久久| 日韩电影中文字幕在线| 在线观看国产欧美| 国产成人免费91av在线| 亚洲春色另类小说| 欧美日韩精品国产| 国产乱肥老妇国产一区二|