0

I will display a grid of a view model class M {string A, int B, float C, int D, .....}:

  1. Render the number in red if it's negative.
  2. Highlight the background of the cell if A is in 'xxx', 'zzz' and B = 0 or D > 200...
  3. Set the background of the row to grey if E > 100 and F < 0....

Are these considered business logic? Where to put these logic if they are? For (3), I guess a new read-only property can be created in in the view model? But it make the M not POJO/POCO any more? I read that the business logic should be in domain object. Is the domain object implemented using POJO/POCO?

Is there any code sample shows how the business logic is stored in domain objects?

4

3 回答 3

1

有几种方法可以实现您正在尝试做的事情。您在描述中多次提到“视图模型”一词,这让我认为您正在尝试使用设计模式“MVVM”(模型视图视图模型),这在使用 WPF 或 Silverlight 技术时很流行,因为它支持针对视图的数据绑定,但也可以扩展到其他技术。

在 MVVM 中,层分为模型、视图模型和视图。

模型本质上是您的领域,仅用于特定领域的建模。您的应用程序实体应该存在于此,但不应进行计算或对域实体的操作。例如。如果它是一个自行车领域,您的“自行车”和“骑手”类应该存在于此,但不应有与计算比赛获胜者相关的代码,或者在应用程序 GUI 中显示获胜者的颜色。

视图模型是您准备要呈现到视图(用户界面)中的域实体的地方。您几乎可以通过将域实体包装到新类中来实现这一点,这些新类在构造函数中获取域对象,然后公开或将现有属性转换为您希望在视图中显示的属性。在自行车类比中,您的 Bike 对象可能具有 Make、Model、Cost、RRP、TimeBuilt 属性,因此在视图模型中,我将公开 Make、Model 属性,然后Cost 和 RRP 与保证金一起转换以得出零售价格(如前端所示)。

您可能已经猜到了View是显示此信息的位置。这可能是桌面、移动或网络前端——这并不重要。这也是应该实现 UI 渲染的地方。如果我想向我的客户突出优惠,并将任何零售价格非常好的自行车涂成绿色 - 我会在这里做。

因此,当与您的示例相关时,应该在视图中实现对象显示的格式化。即使您不使用 MVVM,您也可以通过域对象扩展为要部署和操作的 Wrapper 类来获得非常相似的结果。您的规则,例如

如果 A 在 'xxx'、'zzz' 且 B = 0 或 D > 200,则突出显示单元格的背景

可以在您的视图模型类上以布尔值建模,为您提供所需的效果,而不会用非特定代码污染您的域对象。

无论架构选择如何(MVC、MVP、MVVM 等),这些都是很好的开发指南,因为它们部署了应用程序层之间的关注点分离。

于 2012-05-14T07:23:42.860 回答
0

术语“视图模型”是错误的。View 和 Model 是两个独立的东西,每个都处理应用程序的不同/独立的关注点:封装业务逻辑的模型,视图处理表示/显示。简单来说,模型就是你的领域对象。您在示例中显示的内容与演示相关。它属于视图,不属于模型。

于 2012-05-13T17:41:13.497 回答
0

您可以将所有 3 个计算的输出存储为对象的属性,然后将计算的对象传递给您的视图。

例如,在第 1 点呈现数字,如果它是负数。这种红色可以传递给视图。确定颜色为红色的实际计算可能发生在您的 biz 逻辑层中。

请让我知道这可不可以帮你。

于 2012-05-12T23:50:40.843 回答