作者:mingjava 文章来源:http://www.j2medev.com/Article/ShowArticle.asp?ArticleID=28
开发MIDlet的程序员也许经常会被界面的导航问题所困扰,尤其界面比较多的时候,通常有七、八个界面就会很让人头疼了。本文讲述如何应用MVC设计模式解决这类的问题。
MVC设计模式已经非常的成熟并在WEB Application的开发中广泛使用,apache的开源项目struts就是典型的例子。MVC的本质就是是逻辑和显示分开,通过控制器进行协调。通常我们会感到控制器比较的肥大,这个是个有争议的问题。MIDP的用户界面开发是比较简单的,只有那么20几个类。但是由于导航一般只能通过Command来实现,所以界面增多的情况下,如果没有有效的组织那么程序写起来非常的乱,最致命的是这样的程序可读性差、扩展性差、可维护性差。
应用MVC解决这个问题的关键是提供一个桥梁作用的控制器,它通常要有一个MIDlet作为参数。例如
public UIController(PhoneBookMIDlet pbm)
{
this.phoneBookMIDlet = pbm;
}
为了传递事件,你可以定义一个内部类,在里面定义事件的代号。这样用起来非常的方便例如
public static class EventID
{
private EventID()
{
}
public static final byte EVENT_NEW_RECORD_SELECTED = 1;
public static final byte EVENT_SAVE_RECORD = 2;
public static final byte EVENT_NEWPHONE_BACK_MAINUI = 3;
public static final byte EVENT_LISTPHONE_BACK_MAINUI = 4;
public static final byte EVENT_SEARCHUI_BACK_MAINNUI = 5;
public static final byte ADD_NEW_RECORD = 100;
public static final byte SEARCH_RECORD = 101;
public static final byte CLEAR_RECORD = 102;
public static final byte LIST_RECORD = 103;
public static final byte HELP = 104;
}
我们要在这个控制器内初始化各个界面类,这样我们才能根据不同的事件代号进行导航。
public void init(Model model)
{
this.display = Display.getDisplay(phoneBookMIDlet);
this.model = model;
indexFunctionUI = new IndexFunctionUI(this);
infomationUI = new InfomationUI();
newPhoneUI = new NewPhoneUI(this);
listPhoneUI = new ListPhoneUI(this);
searchPhoneUI = new SearchPhoneUI(this);
displayWelcome();
}
public void setCurrent(Displayable disp)
{
display.setCurrent(disp);
}