Java 有数据行的MVC?
我有一个非MVC Java应用程序,我正在将其重构为MVC,以便于将来的维护。AppGUI包含任意数量的行,每个行由包含多个控件的JPanel表示。我已经将每行的逻辑重构为一个模型类,并按照。我不想粘贴整个代码的MVC框架,但本质上它假设每个类只有一个视图和一个模型,并且每个模型都有唯一的方法名。只要只有一个模型和一个控制器,一切正常Java 有数据行的MVC?,java,model-view-controller,Java,Model View Controller,我有一个非MVC Java应用程序,我正在将其重构为MVC,以便于将来的维护。AppGUI包含任意数量的行,每个行由包含多个控件的JPanel表示。我已经将每行的逻辑重构为一个模型类,并按照。我不想粘贴整个代码的MVC框架,但本质上它假设每个类只有一个视图和一个模型,并且每个模型都有唯一的方法名。只要只有一个模型和一个控制器,一切正常 问题:我现在有n个行视图和n个行模型,都添加到控制器中。更新行视图中的任何文本字段时,所有行模型都会更新。我可以看到修改控制器以存储一对哈希映射视图到模型,反之亦
问题:我现在有n个行视图和n个行模型,都添加到控制器中。更新行视图中的任何文本字段时,所有行模型都会更新。我可以看到修改控制器以存储一对哈希映射视图到模型,反之亦然,但这似乎违反了精简控制器的原则。我觉得我错过了一些显而易见的东西,设计模式和策略。解决这个问题有什么想法吗?您的控制器应该有一个数据存储(数据库或一些基于内存的映射),其中每个模型都有一个唯一的标识符索引。然后,当您将模型加载到控制器中进行修改时,您只需要修改“当前”模型实例 当您一次显示多个模型时,听起来您需要一个“部分视图”——实际的“视图”将显示单个模型视图部分的表或列表,这些部分可以包含在循环中,例如(非常简化的)示例:
//查看
List modelsToDisplay=controller.someFunctionToLoadModels();
用于(型号m:modelsToDisplay){
addModelToView(m);
}
...
公共void addModelToView(模型m){
ViewPartial vp=生成视图部分模型(m);
this.viewPartials.add(vp);
}
...
公共视图部分生成视图部分模型(m型){
ViewPartial vp=新ViewPartial();
vp.setLabel(m.getName());
vp.setTextValue(m.getValue());
返回vp;
}
我的同事指出,模型通常负责数据存储,而控制器只是进行转换以向视图提供适当的模型。
// View
List<Model> modelsToDisplay = controller.someFunctionToLoadModels();
for (Model m : modelsToDisplay) {
addModelToView(m);
}
...
public void addModelToView(Model m) {
ViewPartial vp = generateViewPartialForModel(m);
this.viewPartials.add(vp);
}
...
public ViewPartial generateViewPartialForModel(Model m) {
ViewPartial vp = new ViewPartial();
vp.setLabel(m.getName());
vp.setTextValue(m.getValue());
return vp;
}