如何将模型与视图分开?

时间:2010-05-27 14:33:49

标签: java eclipse-rcp mvp

我有一堆模型对象。

这些对象最终会在富客户端应用程序中呈现为视图(比如表单)。

我开始使用允许我动态渲染它们的东西(例如displayname,group,page,validvalues)来注释模型对象(Java注释)中的字段。

我现在意识到视图已经渗透到模型中。

我应该如何将视图逻辑从模型对象中分离出来?

TECH:Java,Java Annotations,Eclipse RCP

编辑:我的问题是理论上的,但我也想要一些具体的(实施)建议。

5 个答案:

答案 0 :(得分:1)

冒着明显的风险,您需要做的是将显示相关信息存储在其他地方。不要将页面放在模型代码中 - 为界面创建一个对象,让它包含页面对象,并使每个页面知道它显示的值。这可能需要一定量的重构。

话虽如此,你所提到的并不是“观察”。字段的有效值是字段逻辑的一部分;它应该被视为模型的一部分,而不是视图。同样,如果'group'是一个逻辑分组,而不是在界面中的位置,它可能被视为模型的一部分。

答案 1 :(得分:1)

您可以替换注释:

@DisplayName("My Fancy Name") 
@DisplayGroup("My Fancy Group") 
public String myProperty;

由单独的描述符类:

Descriptor desc = new Descriptor(MyClass.class, "myProperty");
desc.setDisplayName("My Fancy Name");
desc.setDisplayGroup("My Fancy Group");

您可以清楚地分离关注点,但是您的编译时安全性会降低(在Java中,因为Java没有属性引用)。

答案 2 :(得分:0)

您可以查看MVC模式并在混合中引入控制器,以提供模型和视图之间的通信。

这可以防止视图爬进模型,因为视图从不与模型对话,它只与负责模型和视图之间所有交互的控制器进行对话

答案 3 :(得分:0)

如果我说得对 - 你使用模型类作为(静态)模型来创建(部分)视图?为什么不 - 在您的情况下,模型(带注释)是一个模型,对象是另一个模型。

只要注释只提供提示(如@Textfield),我就不会发现问题。如果模型已包含对视图对象的引用(如对Textfield的引用),则需要进行重构。最简单的方法是在单独的插件中移动模型类,不要添加任何* .ui类型并将插件视为依赖项。然后修复错误;)

...看看jface数据绑定!在MVC / MVP架构中非常有用!

答案 4 :(得分:0)

视图应该具有对模型的引用,但模型不应该具有对视图的引用。

视图可以写入模型。

视图侦听模型上的事件,例如属性更改或集合更改。

当模型发生变化时,视图会自动更新。

您绝对不应该在模型上使用方法将模型呈现为视图。