大家帮忙看看这个问题:是否适应了设计的要求
描述:一个常见的功能模块,要实现对一个业务对象的属性进行修改和保存。展现一个参数配置界面,它先连接到服务器端取得各项参数,显示。客户进行修改后,可以保存到数据库。
要点一、配置参数存在于服务器端一个xml文件,它的节点和层次关系在将来可能经常变动。这就要求配置界面作响应的变动。设计要求系统能够方便地应对这一变化。
要点二、目前从服务器取得数据的方式非常低效,将来可能换成其他获取方式。设计要求系统尽量将对数据进行获取、解析的过程和界面分离开。
于是想按照MVC的思路进行设计。设想如下:
一个View类,是配置参数的界面,
一个DataManager类,负责连接服务器,获取数据,解析数据的格式,保存数据等
一个Model类,将View要用的各种参数组合成一个对象类,提供一系列set,get方法获取和设置这些参数。
现在问题是怎样建立这三者之间的联系,而不使它们耦合得太紧。
基于这个设想,有下面的做法。不知道好不好?
/////////////////////////////////////////////////////////////////
class View{
DataManager dm;
Mode model;
//用于建立View和DataManager之间的联系
public void setDataManager(DataManager dm){
this.dm=dm;
}
//用于建立View和Model之间的联系
public void setModel(Model model){
this.model=model;
}
//对界面控件的事件处理!!!!!!!!!!!!!!!!!!
//界面某个控件的值改变了,立即更新到Model
component1.addXXXListener(new XXXListener(){
..............
model.setXXX(aaa);
..............
});
//每个控件都如此事件处理
//保存界面参数的处理
saveComponent.addXXXListener(
..............
dm.save();
..............
);
//重新取得数据
reloadComponent.addXXXListener(
.......
dm.load();
.......
);
}
/////////////////////////////////////////////////////////////////
interface Interface1{
public Object getSaveData();
}
class Model implement Interface1{
Object obj1;
Object obj2;
.....
//一定要实现这个方法,DataManager从这里取得要保存的数据
public Object getSaveData(){
//将各个成员变量按存储格式的要求组合起来
//...
return....
}
//下面是一系列set,get方法
}
/////////////////////////////////////////////////////////////////
interface Interface2{
public void load();
public void save();
...
}
class DataManager implements Interface2{
View view;
Model model;
public DataManager(View view,Model model){
this.view=view;
this,mode=model;
}
public void load(){
//连接服务器,取得数据
//一方面,根据取得的数据设置View界面的显示状态
view.component1.setXXX;
.......
//设置view的各个控件的当前值
view.component1.setValue(aaa);
view.component2.setValue(bbb);
//另一方面,根据取得的数据初始化Model
model.setXXX(aaa);
model.setYYY(bbb);
....
}
public void save(){
//从model取得数据,保存
Object values=model.getSaveData();
saveToDB();
//连接服务器,保存数据。
}
}
////////主类
class MainClass(
.........
...........{
View view=new View();
Model model=new Model();
DataManager dm=new DataManger(view,model);
view.setDataManager(dm);
view.setModel(model);
dm.load();
.....
}
}
对于上面的设计,大家说怎么样?感觉View和DataManager耦合很紧。
View中有DataManager,DataManager中有View。有点你中有我,我中有你的味道。
不知道这样做能不能达到要点一、二的要求?大家能否给改一改,谢谢!