我应该在Model还是ViewModel上实现业务逻辑

Mit*_*ins 9 c# mvvm

当我在MVVM应用程序中处理业务逻辑时.我应该在Model还是ViewModel上执行此操作?

例如,如果我想在重新评估资产后重新计算成本,我应该对模型进行操作吗?

相反,在ViewModel上执行此操作是否有优势?

如果我有一个ViewModel列表会发生什么,但我想将其转换为模型列表,以便我可以进行一些处理?我可以将Model公开为ViewModel的属性(并使用它来构建Models列表).但这意味着View将能够访问原始Model的属性

bod*_*gly 12

模型的目的是表示(或建模)您的业务领域.因此,业务逻辑按定义进入模型,而不是ViewModel.

ViewModel的工作是公开Model的属性和字段,并准备它们供View使用.

例如,描绘一个银行应用程序.模型可以代表一个帐户.也许该模型具有帐户余额.模型的工作可能是跟踪平衡并确保维持某些不变量(例如不允许大于余额的提款).ViewModel的工作可能是将余额转换为在视图中用作绑定的字符串.

您希望尽可能多地保留ViewModel中的逻辑,以保持代码可重用和松散耦合.

  • @david我现在确实有不同的意见。业务逻辑属于领域模型。似乎早在 2017 年,我就在考虑 EF 模型,又名 DAO 或数据模型类。 (4认同)
  • 我不同意这一点。理想情况下,模型应仅具有属性,因为模型代表数据。ViewModel是BL的_ok_位置。我将BL尽量放在模型和ViewModels之外。至于您的最后一条陈述,对于Models而言,比对ViewModels更是如此。根据定义,ViewModel与View紧密耦合。 (3认同)
  • @gldraphael ViewModels 根据定义并不与视图紧密耦合。ViewModels 来自 MVP,通过观察者模式和数据绑定与视图松耦合 (2认同)

Fab*_*ato 12

我的建议是将逻辑放在服务层中.这是视图模型和模型之间的中间层(在面向实体的范例中,它应该只包含属性).所以正确的生命周期可能是:查看模型 - >服务 - >模型处理.如果需要,这还允许通过其他视图模型重用业务逻辑代码