标签: mvp

您是否为MVP及其变体中的表示层购买了重用故事?

除了单元测试的好处,我听到的关于MVP模式的是表示层的可重用性.因此,您将设计一个表示层并将其用于WinForms(丰富)和Web.

我目前正在研究.NET中的Windows窗体应用程序,可能会在将来创建Web UI.但是,当我设计表示层和UI层之间的交互时,我不确定这种可重用性的概念是否值得所有麻烦.我有时觉得自己正在为可能的Web UI"减少"我的演示文稿,当它专门为windows窗体UI设计时可以更多.

那么,有多少人正在获得可重用表示层的好处?在现实世界中,这种可重用性是否会成功?

mvp model view presentation reusability

7
推荐指数
1
解决办法
737
查看次数

MVC优于MVP的好处

可能的重复:
什么是MVP和MVC,有什么区别?
mvc和mvp模式

伙计们,

使用MVC而不是MVP有哪些好处?我喜欢我不必使用MVP框架,可以通过接口和类实现.我仍然将MVC所关注的问题分开,并进行单元测试.使用MVC而不是MVP有什么好处?

mvp asp.net-mvc

7
推荐指数
1
解决办法
3384
查看次数

适配器在Mvp模式中的作用?

你如何对待MVP模式中的适配器?例如,在这个项目https://github.com/msahakyan/nested-recycler-view中 有一个MovieAdapter, https://github.com/msahakyan/nested-recycler-view/blob/master/app/src/ main/java/com/android/msahakyan/nestedrecycler/adapter/MovieAdapter.java这个家伙有一个recyclierview作为这个适配器中的项目,(如果你看看他的项目,他已经在他的主屏幕上嵌套了recyclierview.)因为他有这样的一个项目,他进行服务调用和其他通知,加载数据(从服务中取出)等操作在这个适配器中.(没有通信到相关的片段/活动)正如你所看到的,这个适配器有很多工作要做.如果你这样做,你将如何在mvp模式中实现这一点?具体来说,在这种情况下,您是否在适配器中有presenter对象,或者有视图对象来执行调用,通知和加载?

mvp android

7
推荐指数
1
解决办法
2658
查看次数

避免在基于工厂的通用MVP框架中进行转换

我试图在MVP模式中实现一种将View和Presenter分离的方法,以提供一个框架,这正是这样做的,但在一点之后我感到困惑.

背景

我有一个View接口,其中包含连接的演示者的泛型类型,反之亦然.这些接口将由实现开发人员扩展.具体的界面对这个问题不感兴趣,但这些界面的类定义如下所示:

public interface Presenter<T extends View>
Run Code Online (Sandbox Code Playgroud)

public interface View<T extends Presenter>
Run Code Online (Sandbox Code Playgroud)

这个想法是View和Presenter都知道对立的界面.

对于使用此结构,开发人员应提供工厂,实例化他想要显示的视图和处理此视图的Presenter.他把它们都给了一个名为SuperController的类.它们与View的类相关联.

创建Presenter的PresenterFactory接口没有参数,并返回Presenter实现,并查看以下内容:

public interface PresenterFactory<T extends View> {

    <S extends Presenter<T>> S create();

}
Run Code Online (Sandbox Code Playgroud)

创建View的ViewFactory接口基于Presenter创建View实现,并查看以下内容:

public interface ViewFactory<T extends View, S extends Presenter<T>> {

    T create(S presenter);

}
Run Code Online (Sandbox Code Playgroud)

问题

我遇到的问题如下:

我想提供一个TestView和TestPresenter的示例.那些看起来像这样:

public interface TestPresenter extends Presenter<TestView> {...}

public interface TestView extends View<TestPresenter> {...}
Run Code Online (Sandbox Code Playgroud)

此外,还提供了ViewFactory,如下所示:

class TestViewFactory implements ViewFactory<TestView, TestPresenter> {

    @Override
    public TestView create(TestPresenter presenter) {
        return new TestViewImpl(presenter);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是TestPresenterFactory:

private class TestPresenterFactory …
Run Code Online (Sandbox Code Playgroud)

java generics mvp software-design

7
推荐指数
1
解决办法
340
查看次数

新的Web应用程序应该遵循MVC还是MVP模式?

请注意,我不是要求选择哪个(MVC或MVP),而是应该将其中一个用于Web应用程序.

我意识到将旧应用程序从其当前设计转换为MVC或MVP模式可能需要做太多工作.但是,对于一个新的应用程序呢?看来这些是最流行的架构模式,那么应该选择其中一种吗?如果没有,还有其他什么模式?

如果你不熟悉MVC和/或MVP,那么一个很好的问题就是"什么是MVP和MVC,有什么区别?" .它有很多很好的答案,包括各个网站的链接,每个网站都打破了每个网站.

architecture model-view-controller mvp design-patterns web-applications

6
推荐指数
1
解决办法
3626
查看次数

使用StructureMap在模型 - 视图 - 展示器模式中进行Presenter注入

我已经实现了我自己的模型视图演示者模式的副本(在Web客户端软件工厂的静脉中),所以我可以利用我自己的DI框架而不是绑定到WCSF的ObjectBuilder,我遇到了很多问题.我想出了几个方法来做到这一点,但没有一个特别让我开心.我想知道是否有其他人有其他想法.

解决方案#1a

使用HttpModule拦截context.PreRequestHandlerExecute来调用ObjectFactory.BuildUp(HttpContext.Current.Handler)

public partial class _Default : Page, IEmployeeView
{
    private EmployeePresenter _presenter;

    private EmployeePresenter Presenter
    {
        set
        {
            _presenter = value;
            _presenter.View = this;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

解决方案#1b

在页面加载中调用buildup而不是使用HttpModule

public partial class _Default : Page, IEmployeeView
{
    private EmployeePresenter _presenter;

    private EmployeePresenter Presenter
    {
        set
        {
            _presenter = value;
            _presenter.View = this;
        }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        ObjectFactory.BuildUp(this);
    }
}
Run Code Online (Sandbox Code Playgroud)

解决方案#1c

如果需要,通过Property访问presenter允许Getter to BuildUp.

public partial class _Default : Page, IEmployeeView
{
    private EmployeePresenter …
Run Code Online (Sandbox Code Playgroud)

c# structuremap mvp dependency-injection

6
推荐指数
1
解决办法
3319
查看次数

自动映射自定义映射异常

更新1-13-10 我已经能够使用下面的代码找到一些成功的映射.我基本上忽略了没有映射的任何属性,然后映射它们.我希望得到关于我是否以最佳方式进行此项讨论的反馈意见.另外,我不知道如何进行单元测试这种映射.我的印象是使用AutoMapper应该有助于减轻检查每个属性的繁琐.

这是我的新代码:

Mapper.CreateMap<MoveEntity, MoveEntityDto>()
           .ForMember(dest => dest.PrimaryOriginTransferee, opt => opt.Ignore())
           .ForMember(dest => dest.PrimaryDestinationTransferee, opt => opt.Ignore())
           .ForMember(dest => dest.Customer, opt => opt.Ignore())
           .ForMember(dest => dest.DestinationAddress, opt => opt.Ignore())
           .ForMember(dest => dest.OriginAddress, opt => opt.Ignore())
           .ForMember(dest => dest.Order, opt => opt.Ignore())
           .ForMember(dest => dest.Shipment, opt => opt.Ignore())
           .ForMember(dest => dest.SourceSystemName, opt => opt.Ignore());

        Mapper.CreateMap<ContactEntity, TransfereeEntityDto>();
        Mapper.CreateMap<CustomerEntity, CustomerEntityDto>();
        Mapper.CreateMap<AddressEntity, AddressEntityDto>();
        Mapper.CreateMap<OrderEntity, OrderEntityDto>()
            .ForMember(dest => dest.OrderForwarding, opt => opt.Ignore())
            .ForMember(dest => dest.Forwarder, opt => opt.Ignore());
        Mapper.CreateMap<ShipmentEntity, ShipmentEntityDto>()
            .ForMember(dest => dest.Services, opt => …
Run Code Online (Sandbox Code Playgroud)

.net c# mvp automapper

6
推荐指数
2
解决办法
2万
查看次数

在GWT中需要解除绑定演示者的绑定

我按照此处给出的示例使用我的GWT应用程序中的MVP模式http://code.google.com/webtoolkit/doc/latest/tutorial/mvp-architecture.html

我为MainView中的每个面板都有一个MainPresenter和sub-presenter.为了展示一个新的子演示者,我做了这样的事情:

presenter = new PresenterA(new ViewA(), ....);
presenter.go(panel) // presenter clears the panel and itself to the panel
Run Code Online (Sandbox Code Playgroud)

何时PresenterA创建,它将自己绑定到事件中ViewA.我的问题是,切换到新演示者的正确方法是什么?现在,我只是创建一个新的演示者并将其附加到同一个面板,如下所示:

presenter = new PresenterB(new ViewB(), ....);
presenter.go(panel) // presenter clears the panel and itself to the panel
Run Code Online (Sandbox Code Playgroud)

我对这种方法有些怀疑.首先,当我切换到新的演示者时,我是否导致内存泄漏?我丢失了引用旧演示者的字段并将其从附加到的面板中清除.我想这意味着它应该是垃圾收集,但我不是很确定.其次,老主持人的事件绑定会发生什么?这些绑定是否会阻止演示者被垃圾收集?我需要先解开它们吗?

在没有内存泄漏和绑定到"死"事件的情况下处理切换演示者的情况的正确方法是什么.

javascript java mvp gwt memory-leaks

6
推荐指数
1
解决办法
2175
查看次数

如何使用第三方SDK跟踪MVP架构?

我已经看过很多项目,展示了如何在MVP中实现登录,但找不到与Google/Facebook登录相关的任何内容.

在登录流程强烈绑定到Android组件生命周期的情况下,我们该怎么办?我看到MVP的主要好处在于我们建立上述的抽象Context,但是当我们需要遵循,例如,Facebook的登录流程这种抽象会显得过于复杂:你需要注册FacebookCallbackCallbackManager,调用logInWithReadPermissions()(传递活动/片段吧)委派onActivityResult()callbackManager,这将触发FacebookCallback的方法.

我的想法是创造类似的东西

interface AuthInteractor {
    void doFacebookLogin();
    void doGoogleLogin();
}
Run Code Online (Sandbox Code Playgroud)

其实现将了解Context并初始化GoogleApiClient.它会在Presenter中注入,但是所有这些回调(特别是在Facebook的SDK中)会变得太复杂.在这种情况下省略MVP不是更好吗?

mvp android

6
推荐指数
1
解决办法
954
查看次数

MVP在Android中的优势

我是android开发的新手.我想在我的项目中实现MVP,但我不知道使用MVP的优点是什么请告诉我在Android中使用MVP有什么好处.

mvp android

6
推荐指数
1
解决办法
5149
查看次数