我试图了解如何正确使用被动视图。在我看来,我在被动观点上看到的每个例子都违反了德米特定律:

//In the presenter code
myview.mytextfield.text = "whatever";

那么被动视图的更好实现是什么?

有帮助吗?

解决方案

首先,与大多数编程规则一样,德米特定律更多的是一个原则或指导原则,有时该原则不适用。话虽这么说,德米特法则并不真正适用于 被动观点 因为法律的理由在本案中不是问题。

德米特法则试图防止依赖链,例如:

objectA.objectB.objectC.DoSomething();

显然,如果 objectB 的实现更改为使用 objectD ,那么它将破坏 objectA 的依赖关系并导致编译错误。如果采取极端的做法,每当链条因实施变更而受到干扰时,您都会进行猎枪手术。

如果是 被动观点

  • 演示者依赖于接口,因此只要接口保持不变,视图的实现就可以更改。
  • 视图通常将属性公开为通用数据类型,例如系统类型和集合。这使您可以更改 UI,而不会影响演示者。
  • 对于演示者来说,视图只不过是一个数据结构,一个检索和转储数据的地方。由于视图非常简单,演示者甚至不应该能够进行依赖链。

所以你给出的例子通常会被实现:

//from presenter
view.MeaningfulName = "data";

虽然视图会是这样的:

//from view
public string MeaninfulName
{
    get
    {
        return someControl.text;
    }
    set
    {
        someControl.text = value;
    }

希望这能澄清一些事情。

其他提示

一个更好的实施将是有演示和视图之间的API。演示者将通过一个单一的方法(在该视图的接口所定义的)将数据推到其视图。视图将根据一些内部逻辑管理新的输入。

因此,演示者不必了解查看和迪米特法则是什么安全

好了,好了,没错,就是确实的打破迪米特法则,基本上说,接口的对象不应该揭示对象的实现。但随后,第二个给出了宏大很多暗示到实现太

我觉得是时候问你是否有在一般的右侧接口。什么的的这些文本字段?谁是他们设置的看法?如果不认为会问,而不是相反的数据模型,?

也许你需要Observer模式 - 模型保持相关各方的名单,并通知他们时,其内部状态改变


啊,的被动视图。在很长一段时间没看了看说。基本上,我看到两个部分:其中之一是,通过使控制器(而不是型号)驱动所有的更新,(我相信)效率,他暴露了特定领域的方法来更新这些字段。这确实违反迪米特法则,这一点,毕竟只是一个“法”在某些隐喻感,就像墨菲定律。它通常是一个好主意,但。在这种情况下,我会重做查看和使用它作为一个门面到更新换行到单独的场。

您不需要观察者模式虽然,因为现在你已经有了做的所有更新的控制器。它增加了一些复杂性和错误倾向的总体代码,因为现在你的hve写控制器,使并行更新。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top