如何在域对象中存储业务逻辑



我将显示视图模型的网格class M {string A, int B, float C, int D, .....}

  1. 如果数字为负数,则将其呈现为红色。
  2. 如果A is in 'xxx', 'zzz' and B = 0 or D > 200...,请突出显示单元格的背景
  3. 如果E > 100 and F < 0....,请将行的背景设置为灰色

这些是否被视为业务逻辑?如果这些逻辑是,该把这些逻辑放在哪里?对于(3(,我想可以在视图模型中创建新的只读属性?但它使M不再是POJO/POCO?我读到业务逻辑应该在域对象中。域对象是否使用 POJO/POCO 实现?

是否有任何代码示例显示业务逻辑如何存储在域对象中?

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

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

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

视图

模型是准备要呈现到视图(用户界面(中的域实体的位置。您几乎可以通过将域实体包装到新类中来实现这一点,这些类在构造函数中获取域对象,但随后公开或将现有属性转换为您希望在视图中显示的属性。在自行车类比中,您的 Bike 对象可能具有"制造"、"型号"、"成本"、"建议零售价"、"时间构建"属性,因此在视图模型中,我将公开"制造"、"模型"属性,但随后转换"成本"和"RRP"以及边距以得出零售价格(如前端所示(。

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

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

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

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

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

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

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

如果这有帮助,请告诉我。

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

最新更新