标签: mvp

新的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
查看次数

关于GWT内MVP的问题.(总体概述)

关于在GWT应用程序中的使用,你们中的任何人都可以对MVP模式做出很好的解释.我看过的任何一个例子,我发现很难理解实现模式的概念.

这样的问题是什么?它实现了什么,如何实现以及如何扩展以便将来进行修改?

java mvp gwt web-applications

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

在Winforms-MVP和WPF-MVVM中通知最终用户异常

在半年的Winforms-MVP中,我设计了以下异常处理策略.我有一个基本的抽象Presenter类,其中有几个Execute方法将一个委托作为输入参数(签名各不相同).View和Presenter之间的交互是通过IView中定义的事件(输入)完成的,并通过设置公共属性(输出)或调用IView中定义的方法并由View实现.演示者中的每个事件处理程序都会调用其中一个Execute方法,为其提供具体的实现.

在execute方法中,我有几个catch块,用于可能发生的非常明确的异常(主要是因为广泛使用的外部组件中的一些问题).这些异常中的每一个都会停止执行当前操作,通过调用View的方法记录并向用户显示有意义的解释.

不久前(事实上很久以前)我开始学习WPF-MVVM,乍一看似乎与MVP有很多共同之处.我正在寻找关于那里的异常处理策略的一些方便的建议(主要告知用户有关问题),但这个问题一般难以搜索 - 我的意思是说,但主要是原则上.我已经在app.xaml.cs中找到了20多个"处理"未处理异常的例子,这一切都非常好,但请真诚地告诉我 - 如果你知道可能导致应用程序崩溃的确切异常,你不会处理它们吗?稍早一点(即使你将被迫关闭你的应用程序)?我不喜欢抓住所有可能的异常.应该在不关闭应用程序的情况下处理由网络问题,临时数据库不可用等引起的大量异常,而不会出现可怕的错误图标,从而使普通用户有机会重复他的请求.

因此,作为一个实验,我尝试了几乎与之前描述的相同的事情 - 我在ViewModel中创建了事件,用于异常转换和订阅View.但是,坦率地说,这种方式让我感到毛骨悚然.

(这是一个非常长的演讲,我知道)问题:在使用MVVM时,如何处理有关通知用户的异常?不,我现在对数据验证不感兴趣.任何关于MVP的批评和/或建议也是受欢迎的.

c# wpf mvp mvvm winforms

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

如何使用MVP模式在Winforms中构建项目?

我打算用Winform构建应用程序,我想使用MVP模式.

由于我之前从未使用过MVP模式,因此我不确定如何构建新项目.

我应该使用与ASP.NET MVC中相同的约定,例如在项目中为模型,演示者和视图创建单独的文件夹,然后可以使用Presenter类的命名约定,以便它们的名称以"Presenter"结尾(与名称相同) MVC中的控制器以"Controller"结束

或者我应该为Presenter和Model创建单独的项目吗?

.net c# mvp projects-and-solutions winforms

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

如何在MVP中将适配器与Presenter连接?

在RecyclerView中,我有一个ViewHolder带有VideoView和Button"Like"的状态(选择与否).

我的Presenter有一个方法可以更新模型中的"Like"状态 - VideoEntity.在回调中我需要更新View form Presenter,所以我打电话getView().updateItem(VideoEntity entity).之后,我应该找到recyclerView实体位置,并使项目无效.所以我想避免这种情况.

在经典架构中,我可以调用一些方法ViewHolder,在那里获得一些回调并更新已更改的数据.

如何将此伪代码迁移到MVP模式?

@Override
public void onBindViewHolder(ContainerViewHolder holder, int position) {
    ...
    rx.subscribe(result -> holder.update(result));
}

@Override
public void onViewRecycled(ContainerViewHolder holder) {
    if (haveBackgroundRequests) { rx.unsubscribe(holder); }
}
Run Code Online (Sandbox Code Playgroud)

mvp android adapter

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

MVP在Android中的优势

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

mvp android

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

如何使用RxJava 2改进从Firebase数据库读取的Flowable <Object>数据?

我有Recycler Viewer,它显示来自Fire Base db的数据,但是初始List包含大约4k个元素.我试图只显示前15个元素,而不是等待加载完整列表,但不知道如何做到这一点.

我试图通过Subscriber获取(x)元素但是它不会提高读取性能(它仍然等待来自Firebase DB的4k元素).如何加快这个?

订阅者 - 演示者

@Override
    public void onBindViewHolder(final ListContentFragment.ViewHolder holder, int position) {

    modelInterface.getDataFromFireBase("FinalSymbols")
            .take(15)
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Consumer<DataSnapshot>() {
                           @Override
                           public void accept(DataSnapshot dataFromDb) throws Exception {  
            //update TextView inside Recycler Viewer  
                              holder.name.setText(dataFromDb.child(String.valueOf(holder.getAdapterPosition())).child("description").getValue().toString());
                              holder.description.setText(dataFromDb.child(String.valueOf(holder.getAdapterPosition())).child("categoryName").getValue().toString());
                           }
                       }
            );
    }
Run Code Online (Sandbox Code Playgroud)

发布者 - 数据源(FireBase数据库)

@Override
public Flowable<DataSnapshot> getDataFromFireBase(final String childName) {
    return Flowable.create(new FlowableOnSubscribe<DataSnapshot>() {
        @Override
        public void subscribe(final FlowableEmitter<DataSnapshot> e) throws Exception {
            databaseReference.child(childName).addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {                 
                    e.onNext(dataSnapshot);
                    e.onComplete();
                }

                @Override …
Run Code Online (Sandbox Code Playgroud)

mvp observable firebase recycler-adapter firebase-realtime-database

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

带有状态机设计模式的 Android Model-View-Presenter

假设我有一个具有 3 个状态的元素:state1, state2, state3。最基本的流程是:

state1 -> state2 -> state3 -> state1 -> ... 等等

单击按钮时状态会更改。我实现了状态机设计模式来管理这些状态。

当然,当状态发生变化时,布局和逻辑层中的某些事情也会发生变化。问题是,我想知道 MVP 实现在这些状态更改后会是什么样子。视图更改逻辑应该放在哪里,模型更改逻辑应该放在哪里。一个基本的例子会很棒。

这是我的代码:

MainActivity.java

StateContext stateContext;

@OnClick(R.id.button_change_state)
public void onClickChangeStateButton(View view) {
    stateContext.takeAction();
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ButterKnife.bind(this);
    stateContext = new StateContext();
}
Run Code Online (Sandbox Code Playgroud)

StateContext.java

public class StateContext {
    private State state;
    public StateContext() {
        this.state = new State1();
    }

    public void setState(final State state) {
        this.state = state;
    }

    public void takeAction() …
Run Code Online (Sandbox Code Playgroud)

mvp android design-patterns state-machine state-pattern

6
推荐指数
0
解决办法
711
查看次数

Android MVP 持久化

我正在尝试按照 android 蓝图指南将 MVP 模式实施到我的项目中。目前,我在 Presenter 中保存用户(实体数据),我真的不喜欢它,因为在每次配置更改时,Presenter 都会从数据库中获取用户。

我的第一个问题是:

  • 我应该将我的数据保存在存储库中(因为我使用的是 dagger 2 并且存储库位于应用程序范围内)还是我应该将它保存在演示者中并以某种方式将其保存在那里。我个人希望将其保留在演示者中,但是,我正在尝试以传统方式学习。

我也知道 android 架构组件,尤其是 ViewModel,但是,我想保留 MVP 模式而不是 MVVM。

我的第二个问题是:

  • 实现持久化后,我应该如何将 LiveData 与 MVP 一起使用?

我已经被这个问题困住了很长一段时间,很想最终解决它。

干杯

mvp android

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