标签: mvp

ASP.NET MVP - 利用用户控件

我正在编写我的第一个应用程序,使用ASP.NET MVP(尝试监督控制器)和单元测试(迟到总比没有好!),我遇到了一个两难的境地.我写了3个用户控件,所有测试和界面,主持人.现在我来到一个采用这三个用户控件的页面,遇到了以下问题:

用户控件1是DateSelector,它是一个带有其他几个按钮/列表的Calendar控件.没什么真正令人兴奋的

用户控件2是DailyList.猜猜它是什么.无论如何,你可以选择/删除等.如果你从gridview中选择一个项目,它需要填充用户控件3.

用户控件3是ItemDetail.下面是DropDownLists,TextBoxes等...其中一些与其他人存在依赖关系(在DropDown中选择一个选项会影响DropDown 2中的选项).

如果我从DateSelector中选择一个新日期,我是否从DateSelector Presenter中引发事件?我必须以某种方式让其他用户控件知道选择了一个新日期,以便他们可以重新绑定他们的数据,但是如何?如果我使用Page的Presenter订阅用户控件视图的演示者,我是不是会公然违反Demeter法则(通过他们的视图将演示者公开为属性)?我不能使用Page的Presenter作为页面的全知控制器吗?有什么我想念的吗?

到目前为止,我所阅读的所有内容都表示,"即使使用用户控件,MVP也很棒",但在使用示例时,用户控件的使用很容易被遗忘.在我看来,MVC将更加贴近我对此的思考模式,但目前,MVC不是一种选择.任何帮助都会很棒.提前致谢.

asp.net mvp design-patterns

9
推荐指数
1
解决办法
1645
查看次数

降低GWT的代码复杂性

我开始在谷歌上通过示例学习GWT ,我的第一个结论是:代码太多了

像这样:

stocks.add(symbol);
        stocksFlexTable.setText(row, 0, symbol);
        stocksFlexTable.setWidget(row, 2, new Label());
        stocksFlexTable.getCellFormatter().addStyleName(row, 1,
                "watchListNumericColumn");
        stocksFlexTable.getCellFormatter().addStyleName(row, 2,
                "watchListNumericColumn");
        stocksFlexTable.getCellFormatter().addStyleName(row, 3,
                "watchListRemoveColumn");
Run Code Online (Sandbox Code Playgroud)

GWT是否有任何扩展来减少代码大小和简化创建GWT表单?

mvp gwt code-complexity gwt-mvp

9
推荐指数
2
解决办法
1852
查看次数

GWT,MVP和UIBinding - 如何充分利用所有世界

使用MVP,您通常将视图(UI)与Presenter中的Presenter绑定.但是使用最新版本的GWT,特别是使用UIBinding,您可以在视图中执行以下操作:

@UiHandler("loginButton")
void onAboutClicked(ClickEvent event) 
{
    // my login code
}
Run Code Online (Sandbox Code Playgroud)

这基本上为一些快速注释代码交换了许多匿名内部类代码.非常好!!问题是此代码在视图中而不是演示者...

所以我想也许:

@UiHandler("loginButton")
void onAboutClicked(ClickEvent event) 
{
    myPresenter.onAboutClicked(...);
}
Run Code Online (Sandbox Code Playgroud)

但是这种方法存在一些问题.最重要的是,您可以模糊View和Presenter之间的界限.谁做了绑定,在某些情况下它是视图,在其他情况下它是演示者(绑定到不在当前视图中但需要附加的事件 - 例如系统范围的更新事件).

您仍然可以获得能够对演示者进行单元测试的好处,但需要付出多少代价.责任现在很混乱.例如,绑定有时在"视图"中,其他时间在"演示者"级别中.随着时间的推移,我可以看到代码陷入各种混乱状态.

我还考虑将Presenter扩展到View,以便您可以在View中执行此操作.这里的问题是你失去了Presenter运行标准单元测试的能力!这是一个重大问题.这和线条再次变得模糊.

所以我的问题是,有没有人有一个很好的方法来利用MVP模式中UIBinding的注释,而不会模糊线条并失去MVP模式的优势?

mvp gwt

9
推荐指数
2
解决办法
4535
查看次数

GWP 2.2的MVP或活动和场所

我最近一直在研究GWT和MVP,说实话我很困惑.我的项目将包括大约40个不同的地方或观点.在阅读多个教程时,有些人遵循模型 - 视图 - 演示者,其他人使用活动和地点,所有这些都在MVP,GWT的主题下.

我不确定要为新的MVP GWT 2.2项目做些什么.

非常感谢,Alex

mvp gwt

9
推荐指数
1
解决办法
2160
查看次数

在MVP GWT应用程序中测试演示者

我有一个简单的应用程序,并希望使其可测试.我是这个领域的新人.这是一个简单的Presenter,请记住这段代码,你能建议或给我一些如何测试它的例子.

    public class SomePresenter extends Presenter<MainPanelPresenter.Display>
    {

    public interface Display extends WidgetDisplay
    {
      HasClickHandlers getAddButton();

      HasClickHandlers getDeleteButton();

      void setData(ArrayList<Person> data);

      ArrayList<String> getSelectedRows();

      Widget asWidget();

    }

    private final DispatchAsync dispatcher;
    public static final Place PLACE = new Place("main");

    @Inject
    public SomePresenter(DispatchAsync dispatcher, EventBus eventBus, Display display)
    {
      super(display, eventBus);
      this.dispatcher = dispatcher;
      bind();
    }

    protected void onBind()
    {
      display.getAddButton().addClickHandler(new ClickHandler()
      {
        public void onClick(ClickEvent event)
        {
          eventBus.fireEvent(new AddButtonEvent());
        }
      });

      display.getDeleteButton().addClickHandler(new ClickHandler()
      {
        public void onClick(ClickEvent event)
        {
          ArrayList<String> list = …
Run Code Online (Sandbox Code Playgroud)

java mvp gwt unit-testing

9
推荐指数
1
解决办法
2015
查看次数

在Android应用中实施MVP

每个Android Developer都面临着一个问题,即活动或碎片很复杂,因为大多数应用程序只使用View-Model设计.和我一样,所以我开始寻找更好的解决方案.

引起我注意的是MVP,它是旧设计,但一次又一次地重生.

我认为这篇文章及其示例非常有用,但我发现了一个可能的问题.

我假设我们可以用这种方式创建应用程序:

片段和活动是View的一部分.它们与Presenter连接,Presenter调用DataManager来加载内容.DataManager作为Model的一部分引用了每个数据助手.但是在这里DataManager在我们的应用程序中开始成为上帝,因为它为每个Presenter提供了所有方法.

我还发现了第二个可能的问题.演示者可以在列表中保存数据,因此每次我们更改屏幕的方向时,我们都不必为新内容调用DataManager.但是不知道如何实现该演示者与Activity生命周期无关,除了在我们的Activity中有静态字段.

总结一下:

1.以某种方式创建多个DataManage并且当一个DataManager开始过载时,它会更好吗?实现多个DataManagers的最佳方法是什么?

2.如何实现PresenterView之间的关系,其中Presenter与Activity生命周期无关?

我可能会误解一些想法,所以每一个帮助都会受到赞赏.

编辑

这显示了MVP究竟应该如何看待imho

这显示了MVP究竟应该如何看待imho

编辑2

由于帖子被指定为过于宽泛,我只想问

1.将DataManager作为上帝类或者我应该实现多个DataManagers是好的模式吗?如果是这样,最好的方法是什么?

mvp android

9
推荐指数
0
解决办法
633
查看次数

在MVP android应用程序中的演示者之间进行通信

我正在使用MVP模式构建一个小型测试Android应用程序.我有两个片段片段B(我用于滑动抽屉)和片段A(主片段).这两个片段都有自己的演示者.当我点击滑动绘制时,它应该发送消息或调用片段A中的方法来更新视图.我想问一下,两位片段主持人如何在MVP下进行交谈.我知道其他解决方案,但我想通过MVP模式来实现.

请建议MVP模式遵循的一些选项来处理此类场景.

mvp android android-fragments

9
推荐指数
1
解决办法
1682
查看次数

带有Presenter的RxJava和用于配置更改的保留片段

我是RxJava的新手,并将其与MVP架构结合使用.

我发现了一些关于使用保留片段在配置更改时保存observable的示例(仍然不确定这是否是最好的方法).我发现的例子是直接在Activity或Fragment上处理observable,而不是从Presenter处理.

所以我试验并设置了这个快速示例(仅使用Reactivex的RxJava和RxAndroid lib)来测试,这似乎工作正常.这个例子的作用是:

  1. 使用无头保留片段启动活动.
  2. 按钮
  3. Presenter调用FakeService以获得延迟(5秒)响应的可观察性.
  4. Presenter对此可观察对象执行.cache().
  5. Presenter告诉视图保留此可观察性.
  6. View将可观察对象保存在保留的片段中.
  7. Presenter订阅了observable.
  8. 用户执行配置更改(设备轮换).用户可以根据需要多次执行此操作.
  9. OnPause告诉Presenter的CompositeSubscription清除和取消订阅所有当前订阅.
  10. 重新创建活动并重用现有的保留片段.
  11. Activity的onResume检查保留的片段的存储的observable是否为null.
  12. 如果不为null,则告诉Presenter订阅它.
  13. 保留的observable被订阅,并且因为.cache被调用,它只是将结果重放给新订阅者而不再调用该服务.
  14. 当Presenter向视图显示最终结果时,它还将保留的片段的已保存observable设置为null.

我想知道我是否正确地执行此操作,并且当在Presenter中处理observable的订阅时,是否有更高效或更优雅的方式来处理配置更改?


编辑:感谢您的反馈.基于此,我已经达到了我认为更清洁的解决方案,并且我已经更新了我的链接示例.

随着新的变化; 而不是将Observable从Presenter传递给Activity到retainFragment以存储一个configurationChange事件,我宁愿将retainFragment设置为Presenter创建时的第二个"视图".

这种方式当onResume()在设备旋转后发生时,我不需要让Activity执行将Observable从retainFragment传递回Presenter的丑陋管道.

Presenter可以直接与第二个"视图"进行交互,并检查保留的observable本身并在需要时重新订阅.主要活动不再需要知道这个可观察的.突然间,这是一个更简单的视图层.

mvp android rx-java rx-android

9
推荐指数
1
解决办法
2843
查看次数

nodejs中的示例Model-View-Presenter应用程序

我正在探索不同的MV*模式,并注意到MVP在.Net应用程序中使用非常多,但几乎没有其他地方.
似乎包含它的唯一其他大框架是GWT,但仅限于某些部分.

  1. 为什么MVP是微软的东西(为什么它在其他语言中几乎不受欢迎)?
  2. 是否有使用MVP的nodejs应用程序/项目(最好是我可以查看的源代码)?

.net mvp node.js

8
推荐指数
1
解决办法
2363
查看次数

多个活动/片段和模型视图Presenter模式

首先,我知道使用Model View Presenter有不同的实现,在我看来,只要你清楚地定义了抽象层并完成了他们指定的角色,那么你如何实现这种模式是开放的解释.我在很多只有一个应用程序的应用程序中实现了这种模式Activity.我现在已经开始了一个具有多个活动并附加的新项目Fragments,包括嵌套片段(ViewPager).

我现在正试图将MVP翻译成这个项目,我已经打了一个概念墙,想要一些指导和见解.

到目前为止,我已经创建了上述结构,开始做一个1:查看&主讲人(不管1的关系ActivityFragment).我觉得这没关系,但是例如我发送了一个请求从ActivityView向其Presenter 做了一些事情,它将结果返回到ActivityView我将如何传播结果,即更新所有其他活动/片段目前不在Paused()Stop()州.我觉得在这种情况下应该有一个中央Presenter更新所有必要的Activity和Fragment Views,但我不知道如何去做.

目前,当每个ActivityFragment创建它时,它创建一个Presenter类的新实例,将其自身作为引用传递(活动和片段实现它们自己的接口),演示者将其存储为a,WeakReference并在返回结果时调用相关的接口方法.

根据文档,每当Fragments想要彼此通信和附加时,Activity您应该使用回调接口.考虑到这一点,我应该有一个回调接口,该活动器具和Fragments回调时,他们要求的东西,所以在本质上只是活动将有一个片段具有回调,以便使各种请求演示和模型层?

对不起,如果这听起来有点混乱,希望这足以清楚地了解我想要达到的目标,如果我正在思考正确的方向......或者完全不合适!

mvp android design-patterns android-fragments android-activity

8
推荐指数
1
解决办法
2548
查看次数