【问题标题】:How would you design business logic interaction with Viewmodel in mvvm您将如何在 mvvm 中设计与 Viewmodel 的业务逻辑交互
【发布时间】:2017-08-09 14:58:03
【问题描述】:

视图模型可以通过哪些方式获取业务逻辑。可以说,我有 3 个模型,基于这 3 个模型数据我将生成(基本上计算)一些新值(比如说模型 4),我将在视图中显示这个模型 4 数据。

请注意,我不能将计算逻辑放在服务端,因为我无法控制它们。我必须在我这边计算模型 4。我应该在哪里计算这个模型 4 值?

问题 1) 调用服务表单 ViewModel 是一种好习惯,即 GetModel_1_Data、GetModel_2_Data、GetModel_3_Data 如果不是什么好习惯?

2) 根据 mvvm,我不允许在 ViewModel 上使用业务逻辑 ...那我应该在哪里做呢?我们可以通过哪些不同的方式实现..this?

3) 在 Mvvm 中,我看到 UI 使用的模型基本上是带有 INotifyPropertychanged 的​​模型.. 称呼它们的正确词是什么.. 我可以称之为 UI 模型吗?还是 UI 模型对象?其他模型就像普通的 CLR 对象一样。

当我读到 mvvm 时,许多人说要在 Model..whic 模型中保留逻辑..他们的意思是普通的 clr 类..或 UI 模型(他们有 INotifyPropertyChanged) 如果不需要,我们是否需要一些层来从 POCO 模型生成 UI 模型?这层叫什么..如果是这样...

谢谢,

【问题讨论】:

    标签: wpf silverlight mvvm architecture


    【解决方案1】:

    我认为,一旦您不再将 Model 视为单个类,一切都应该清楚了。 MVVM 是关于表示层设计的。为了专注于表示,它将整个业务逻辑层抽象为一个模型。从这个意义上说,Model 是一个层,而不是单个类或组件。它本身可以有自己的设计模式(服务、DDD、CQRS、...)。

    回答你的问题

    请注意,我不能将计算逻辑放在服务端,因为我无法控制它们。我必须在我这边计算 Model 4。我应该在哪里计算这个 Model 4 值?

    这取决于您认为计算逻辑是什么。如果是业务逻辑,那么应该放到“模型”层。并不总是有一条明确的界限。有时,这是您做出的决定/分类。

    问题 1) 调用服务表单 ViewModel 是否是好的做法,即 GetModel_1_Data、GetModel_2_Data、GetModel_3_Data 如果不是好的做法是什么?

    我不明白为什么不。另一种方法是添加额外的应用程序服务(或显示服务)层,以将 ViewModel 的创建与 ViewModel 本身分开。

    2) 根据 mvvm,我不允许在 ViewModel 上使用业务逻辑 ...那我应该在哪里做呢?我们可以通过哪些不同的方式实现..this?

    如上回答,只要你认为计算逻辑是业务逻辑,就应该放到“Model”中。除非,Model 4 是纯粹的展示。上面给出了一个替代方案

    3) 在 Mvvm 中,我看到 UI 使用的模型基本上是带有 INotifyPropertychanged 的​​模型.. 称呼它们的正确词是什么.. 我可以称之为 UI 模型吗?还是 UI 模型对象?其他模型就像普通的 CLR 对象一样。

    它们通常被称为 ViewModel

    当我读到 mvvm 时,许多人说要在 Model..whic 模型中保留逻辑..它们是指普通的 clr 类..还是 UI 模型(它们有 INotifyPropertyChanged)如果不是,我们是否需要一些层来生成 UI POCO模型的模型?这层叫什么..如果是这样...

    模型可以表示业务逻辑对象或业务逻辑层,在上面的上下文中,它表示业务逻辑层

    【讨论】:

    • 非常感谢郭小果。我喜欢你解释的方式。请您提供 Viewmodel 正在使用业务层/模型层的任何 Web 链接。我猜它会是构造函数注入。我将非常感激。给你。请提供任何网络链接..或你的建议视图模型如何与业务层交互。
    • 没有适合您的代码示例。但是,如果您正在寻找更官方的答案,这可能会有所帮助msdn.microsoft.com/en-us/magazine/jj694937.aspx
    • 非常感谢小果
    猜你喜欢
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多