2010-05-27 80 views
3

我有一堆模型对象。如何从视图中分离模型?

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

我开始用模型对象(Java注释)中的字段注释,让我可以将它们呈现为表单(例如显示名称,组,页面,有效值)。

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

我应该如何将视图逻辑与模型对象分开?

TECH:Java中,Java注解,Eclipse RCP的

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

回答

0

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

这可以防止蔓延到模型视图从不跟模型只会谈到控制器负责模型和视图

+0

谢谢,我已经使用了某种形式的MVC,但我有点想知道这是如何实现的,就像链接到模型中的字段的XML一样,或者是在模型字段之间提供映射的控制器并显示字段... – geejay 2010-05-27 14:46:29

1

在说明明显的风险之间的所有互动的观点,你需要做的是将显示相关的信息存储在别的地方。不要将页面放在模型代码中 - 为接口创建一个对象,让它包含页面对象,并让每个页面知道它显示的值。这可能需要一定量的重构。

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

0

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

只要注释只是提示(如@Textfield)我没有看到问题。如果模型已经包含对视图对象的引用(如对Textfield的引用),那么就需要重构。最简单的方法是将模型类移入单独的插件中,不要将任何* .ui类型和视图插件添加为依赖项。然后修复错误;)

...并看看jface数据绑定!在MVC/MVP架构中非常有用!由一个单独的描述符类

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

+0

谢谢,我已经使用JFace数据绑定。关于模型类和对象的评论很有意思,我有点赞同那里,只是这些类生活在模型组件中,而且它看起来并不正确...... – geejay 2010-05-27 14:57:25

+0

但是,如果它们只包含任何表示层的提示,那么对我来说很好。或者,您可以维护一个包含这些提示的单独文档,例如属性文件。但是这引入了风险,即模型和属性文件不同步。 – 2010-05-27 15:03:46

+0

有关UI的暗示并不严格破坏MVC分离,但您必须问 - 为什么会出现?为什么不将信息存储在View实现中? – DJClayworth 2010-05-27 15:05:42

1

你可以替换注释

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

你的顾虑完全分离,但你失去编译时安全性(在Java中,因为Java不没有财产参考)。

0

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

视图可以写入模型。

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

视图然后在模型更改时自行更新。

您绝对不应该在将模型渲染为视图的模型上使用方法。