问题标签 [passive-view]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
10 回答
7177 浏览

model-view-controller - 模型-视图-控制器有哪些替代方案?

在读大学和关注 SO 的发展过程中,我听说了很多关于 Model-View-Controller 架构设计模式的信息。甚至在我知道它是什么之前,我就无意中使用了 MVC 模式,并且仍然在我的日常工作中使用它。从我所见,它可能是当今最流行的模式。不过,我没有听到太多关于您可以使用替代 MVC 的替代模式。有哪些选项,您会出于什么原因决定在 MVC 上使用它们?我也有兴趣了解它们通常用于的系统类型。最后,使用它们的优点和缺点是什么?

0 投票
6 回答
4352 浏览

javascript - 将 2 个 javascript 对象连接在一起的正确方法是什么?

我目前面临一个难题:将 2 个 javascript 对象连接在一起的正确方法是什么?

想象一个像文本编辑器这样的应用程序,它有几个不同的文件。我有一些代表笔记本视图的 HTML 页面。我有一个文件 notebook.js,其中包含 NotebookController 和 Notebook View 的类定义。

NotebookControler 对象负责在 Notebook 上执行业务逻辑,例如“保存 Notebook”、“Load Notebook”、“New Notebook”。NotebookView 负责管理用于演示的 HTML。它执行诸如“获取/设置笔记本正文”“获取/设置笔记本名称”之类的低级操作。它还侦听 DOM 事件 (onClick) 并触发业务事件 (saveNotebook)。这是我对被动视图模式的尝试。

我希望我的 javascript 客户端代码是面向对象的、分离的关注点和可单元测试的。我想用模拟 NotebookView 测试 NotebookController,反之亦然。这意味着我不能只在 NotebookController 中实例化一个 NotebookView。我也是

  • 在我的 notebook.js 中加入一些逻辑,将 2 连接在一起
  • 在我的应用程序中有一个全局函数,它知道实例化每个函数并将它们连接在一起
  • 使用依赖注入,无论是自产的还是类似 SquirrelIoc 的东西

在 Java 中,选择很自然:使用 Spring。但这似乎不太适合 JavaScript。什么是正确的做法?

0 投票
9 回答
2271 浏览

asp.net-mvc - 为什么微软为 ASP.NET 选择 MVC?

除了作为一个 30 年的模式之外,MVC 从来都不适用于当前的应用程序。MVP 是它的继任者,旨在处理 90 年代出现的基于事件的应用程序。Passive View 和 Supervising Controller 似乎已经升到了顶峰。对于这两个,几乎没有必要谈论 MVC/MVP。

具体来说,ASP.NET MVC 中的控制器操作是否会带回创建该视图的视图?在 MVC 中,控制器不会创建视图或与它们对话。将 ASP.NET MVC 称为 MVC 实现有多准确?或者,它的准确名称是什么?

0 投票
3 回答
511 浏览

law-of-demeter - 被动视图是否违反了得墨忒耳法则?

我试图了解如何正确使用被动视图。在我看来,我在被动视图上看到的每个示例都违反了得墨忒耳法则:

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

0 投票
3 回答
1725 浏览

c# - 我应该如何将 TreeView 控件中的分层数据公开给 MVP 演示者?

我在 Winforms TreeView 控件中有一些分层数据,我需要将其作为属性公开,以便我的演示者可以同步对其的更改。为了清楚起见,我使用的是被动视图模式。对于大多数 WinForm 控件来说,这是显而易见的。控件本身将其数据公开为系统类型,可以轻松传递给演示者。TreeViews,因为它们的复杂性,不容易映射到系统类型。我寻找了一个框架集合类型,但树似乎被忽略了。(微软似乎在引擎盖下使用树结构用于几个更高级别的类,但选择不创建通用类家族。)

在任何情况下,我试图公开的数据都不会超过两个节点的深度,所以我什至不确定我是否会继续使用 TreeView。更有理由避免将演示者绑定到 TreeNodeCollection。

我已经提出了一些想法,但我只是想将它们从 SO 社区中反弹:

  • 将树公开为集合的集合......比如说一个列表字典。
  • 创建自定义树结构,在流程中将依赖项引入视图。

顶级节点平均有 5-10 个条目,而它们的子节点理论上可以达到 50 个,但实际上不会超过 3 或 4 个。

有什么建议么?

0 投票
4 回答
305 浏览

c# - 我的演示者需要提示用户提供更多信息。我该如何接线?

我正在使用被动视图模式。用户单击新帐户按钮。视图使用无参数方法调用将责任委托给演示者。

问题是有多种帐户类型,因此用户需要选择他们想要创建的帐户类型。我该如何解决这个问题?

  1. 从视图中创建一个新表单,获取所需信息并将其作为属性公开,以便演示者可以检索它。(这忽略了视图中不应包含任何逻辑的概念)
  2. 从演示者创建和使用新表单。(这将演示者直接与表单联系起来,忽略了 MVP 的全部要点)
  3. 在其他地方创建新表单并将其作为构造函数参数传递给演示者......或视图。
  4. 忘记它并为每种帐户类型添加一个新按钮。(有许多帐户类型,这会使 UI 变得混乱,但就这样吧。)
  5. 我正在以错误的方式解决这个问题,需要重新考虑我的设计。(如果是这种情况,将不胜感激朝正确方向轻推。)
0 投票
1 回答
999 浏览

c# - 如何以 MVP 模式将 UserControl 附加到表单?

我正在尝试使用 MVP 模式创建一种主/详细 UI。我有通常的嫌疑人:

我还有一个 UserControl,它也是它自己的 MVP 三元组的视图:

MainPresenter 创建了 SubPresenter 的实例,而 SubPresenter 又创建了 SubView 的实例。我的问题是视图不包含对彼此的引用,甚至不知道彼此存在。他们只知道他们自己的演示者,但我想将一个用户控件视图附加到另一个表单视图。这是否可以做到并且仍然保持每个视图对彼此的无知?

到目前为止,所有视图都将每个演示者所需的属性公开为系统类型,因此如果 ListBox 更改为 ComboBox 或 RadioGroup,则演示者不会受到影响。如果可能的话,我想保持这种方式,但如果我别无选择,我愿意打破这种模式。

我这样做的原因是 MainView 向用户展示了一组对象。每个对象可以是几个(超过 50 个)不同的类之一。所有人都将实现一个通用接口,但用于操作每个对象的 UI 将随底层类的不同而不同。

顺便说一句,这是一个针对 .NET 2.0 的 Winforms 应用程序(尽管它被编译为 C# 3.0)

0 投票
2 回答
3602 浏览

c# - 在被动视图中实现事件的好方法是什么?

我正在学习被动视图模式,以使我的 C# WinForms 应用程序更易于测试和维护。

到目前为止它运行良好,但我想知道是否有比我现在做的更好的方法来实现事件(并保持它们可测试)。这就是它的样子(省略与本示例无关的代码)。基本上我正在寻找是否有一种方法可以跳过演示者和表单中的事件,我宁愿在演示者中完成所有工作。

我的观点是这样的:

我的主持人看起来像这样:

我的 WinForm 看起来像:

谢谢!

0 投票
3 回答
3004 浏览

java - 模型视图演示者和复合视图

我正在尝试在 java swing ui 应用程序中遵循 MVP(特别是被动视图)模式。

应用程序的基本设计提醒了一个向导控件。屏幕分为两个主要部分:

  • 一个活跃的视图。
  • 带有导航按钮的静态导航栏。

用户可以使用按钮来更改活动视图,但始终显示栏。

为这个场景建模,我有一堆不同的 screers,每个都有自己的演示者、视图接口和视图实现(使用 JPanel)。然后我有一个 Shell 演示者,使用 JFrame 查看接口和查看实现。这个想法是外壳将首先加载并始终显示,显示底部导航栏并为活动视图留出空间。shell Presenter 将允许设置当前的活动屏幕,有点像这样:

问题出在 setActiveView 方法中:我不知道如何将 activeView 设置为 activePanel,当 View 界面是通用的并且因此对 JPanel 一无所知时。显然我不希望我的演示者也知道 JPanels。

0 投票
1 回答
365 浏览

design-patterns - 在被动视图模式中创建子视图

我对使用被动视图模式来提高可测试性非常感兴趣,但我不确定如何调用子对话框。

您是否让父视图创建子视图并向父控制器返回接口,然后让父控制器创建子控制器?