首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

自个儿写的j2meMVC模式

2012-08-21 
自己写的j2meMVC模式cotroller 控制类包model 数据组织类包view 视图类包参考文章:转载:http://www.yesky.

自己写的j2meMVC模式

cotroller 控制类包

model 数据组织类包

view 视图类包

参考文章:

转载:http://www.yesky.com/395/1923895.shtml


  控制器并不总是联系着Model,有时只是依赖关系。并且Controller往往通过Model的对应的生命期类来获得Model对象。在这种形式中,层层隔离,View与Controller紧密相连,而Model有很高的独立性,可以很好的重用。

  一般的结合UML设计的过程,对MVC的各个类有相应的命名习惯。

  View  称为Boundary 类(边界类) 以UI结尾

  Controller   称为 Controller 类(控制类)  以Workflow结尾

  Model   称为Entity 类(实体类)  以Entity结尾或者没有尾缀

  Model对应的Lifecycle 类(生命周期类)  以Locator结尾

自个儿写的j2meMVC模式
  边界类和控制类的基础类如下

BaseView.java
/**
* @author Favo
*
* 视图类
*/
public abstract class BaseView {

 public abstract Display getDisplay();

 /**
 * 简单的返回包装的屏幕对象,不要做任何准备屏幕的操作!
 */
 public abstract Displayable getScreen();

 /**
 * 创建屏幕
 */
 protected abstract void createView() throws Exception;

 /**
 * 更新屏幕
 */
 public abstract void updateView() throws Exception;

 /**
 * 返回控制器
 */
 public abstract BaseController getController();

 /**
 * 准备屏幕
 * 返回准备好的屏幕对象
 */
 public Displayable prepareScreen() throws Exception {
  if(getScreen()==null){
   createView();
  } else {
   updateView();
  }
  return getScreen();
 }

 /**
 * 显示当前屏幕
 */
 public void displayScreen(){
  try{
   getDisplay().setCurrent(prepareScreen());
  } catch (Exception e) {
   e.printStackTrace();
   Alert al=new Alert("Error",e.toString()+'\n'+e.getMessage(),null,AlertType.ERROR);
   al.setTimeout(Alert.FOREVER);
   getDisplay().setCurrent(al);
  }
 }

}

BaseController.java
/**
* @author Favo
*
* 控制类
*/
public abstract class BaseController {
 public abstract BaseView getView();
 public abstract void setView(BaseView view);
}
  注意到这些基础的类并没有向MFC框架那样产生完整的框架,而是设计成了抽象类,一来希望强迫大家实现抽象类(防止出错);二来希望增加一点灵活性。所以两个类之间的通信就要靠大家撰写的子类的构造函数了。一般我的习惯是,初始化好控制器,然后将控制器作为参数传给边界类的构造函数,由边界类的构造函数来回调控制器的setView()来实现的。这些步骤是一定要有的,不然会NULLpointerExcpetion哦。

  尽管理论上可能很清晰,但实践带来的复杂性是惊人的。这正是软件开发的问题,太多的细节困扰这开发者对大局的把握。本文接下来,将结合最后这种设计思想,给出一个完整的设计实例。帮助大家从实践的角度理解运用这一模式。敬请大家期待。


  上面看到的是个典型的M—V模型,我们可以理解这种以屏幕为核心的分离的含义。Model组织起屏幕的数据,view向Model索要其希望显示的数据,注意这一操作一定要通过预先协商好的接口访问,而不是直接操作。如果出现复杂的事务逻辑(用户选择的某种操作),有人将其放在Model端,也有人放在View端,但一般上放在Model端,这时Model带有严重的Controller的色彩。

  这种形式的优点是非常的直观,也有限的分离了显示和数据。如果常看j2medev.com站长Mingjava的文章,可以看到大部分他写的例子都是这种模式。并且这种模式也常常用于RAD工具。

  这种模式的缺点是它与RAD工具一样鼓励你从屏幕开始思考问题,这往往让你陷入RAD的陷阱——不先考虑事务的流程,而是从用户接口直接下手去分析问题,这往往扼杀了你的全局构思。

热点排行