据我所知,当我们使用MVP时,我们将所有表示逻辑移动到Presenter.但我们不想让Presenter了解视图实现,那么我们如何导航到应用程序中的另一个屏幕呢?您如何管理实际应用程序的应用程序流程?
我对这两个编程模式有点困惑:MVC和MVP.
它们之间的主要区别是什么?我一直在网上搜索,我做了两个例子,但是我更加困惑,因为在一些示例网页中,MVP使用2个以上的界面来将展示者与视图层进行通信(有些是甚至有完全空白的接口,只有声明),但在其他接口只需要两个接口就可以将数据从演示者传输到视图.应用该模式的正确方法是什么?
另一方面,我一直在研究MVC,但直到现在,我才意识到,也许我一直在以错误的方式应用模式.我有这个:
我希望你能清除我的怀疑.提前致谢.
我想知道是否将SelectList的默认值设置为表示逻辑或业务逻辑?例如,如果要求是没有位置就无法保存员工,但99%的时间选择的位置是特定项目 - 比如亚特兰大.因此,当显示新员工的输入屏幕时,应将位置SelectList默认为亚特兰大.我应该默认模型中还是视图模型中的位置?我意识到的一件事是单元测试变得很尴尬,因为在这两种情况下,我都被迫测试一个始终存在于生产中的位置,但我不能使用我自己的测试数据创建单元测试,除非"亚特兰大"是在测试中使用的一组位置中.一世'
我正在搜索GWT Design来设置项目.我可以使用MVP(GWTP)或JBoss Errai.我还没有决定.是否有人在其中一个经历过?
您可以给出这些框架的优缺点.
我主要来自ASP.Net背景和一些MVC.我还做了一点Silverlight和MVVM,但是我现在要进入Winforms,我很少有经验,所以我想知道如何解决MVP问题.
典型的MVP示例显示了演示者设置视图属性(通过某种IView接口),具体视图将该属性值放入文本框中.而不是这种古老的方法,可以在MVP中使用INotifyPropertyChanged,如果是,如何?一个非常快速的例子非常有用!
如果我要创建一个实现INotifyPropertyChanged的模型,那么这不是更像MVVM吗?(即演示者更新模型,并通过INotifyPropertyChanged的魔力更新视图).然而,在我读过有关MVVM和Winforms的各个地方,人们都认为它不合适.为什么?我的理解是你可以对任何控件的属性进行数据绑定,那么Winforms缺少什么?我试图理解Winforms中数据绑定与WPF相比的缺点,以及为什么不能使用MVVM,因为它似乎比MVP更容易实现.
在此先感谢安迪.
我正在尝试按照模型视图展示器(MVP)模式在我的应用程序中开发项目管理系统.我的问题是,我看过很多MVP的例子,但我没有看到一个有一个Presenter和多个Views.例如,当用户打开项目时,可以通过树视图,数据网格和图表查看相同的项目数据.我该如何应对?
我已经在一些使用被动视图的WinForms应用程序中实现了MVP模式.我实现了一个包含Action <T>和Func <T>形式的属性和委托的接口,以在具体视图中连接UI事件并回调给演示者.
我即将开始一个新项目并对在线模式进行了一些研究,包括这里的模式的许多示例,并注意到所有使用EventHandler来通知演示者.
我真的不明白为什么会在这种情况下使用事件,因为我看到一个视图只有一个演示者.
我的问题是,这是为了与.Net框架如何使用事件保持一致,还是出于其他原因我没有看到?
这是我使用的模式的一个简单示例:
public interface IViewAbstraction
{
public ModelData ModelData { set; }
public Action<ModelData> ModelDataChangedCallback { set; }
}
public class SomeWinForm : Form, IViewAbstraction
{
private Action<ModelData> modelDataChanged;
private ModelData model;
public ModelData ModelData
{
set { /* when this property changes, update UI */ }
}
public Action<ModelData> ModelDataChangedCallback
{
set { modelDataChanged = value; }
}
private void OnSomeWinformsEvent(EventArgs args)
{
if (modelDataChanged == null) throw new Exception();
modelDataChanged(model);
}
}
public …Run Code Online (Sandbox Code Playgroud) 我有一个在MVP中实现的WinForms应用程序.我的表单有一个TextBox,我想将其Text属性数据绑定到Model中的属性.我不想在视图中引用模型.
在谷歌搜索后,我发现通过耦合模型和视图进行数据绑定是一个坏主意.我的样品初始化Model,View并且Presenter是如下.
class View : Form, IView
{
public View()
{
InitializeComponent();
new Presenter(this);
}
}
class Presenter
{
public Presenter(IView) : this.Presenter(this, new Model())
{
}
public Presenter(IView view)
{
}
}
class Model : IModel
{
public Model()
{
}
}
Run Code Online (Sandbox Code Playgroud)
目前我已经为每3个项目Model,View和Presenter.View参考Presenter并Presenter参考Model.任何人都可以指导我如何形成数据绑定到控件View到属性Model?
编辑
我知道在Grid中做的事情.我们可以在演示者中将Datasource网格的属性分配给List(或类似的),如:
_view.DataSource = _model.ListOfEmployees;
Run Code Online (Sandbox Code Playgroud)
这将反映 …
关于地点和活动+ MVP的文档,我必须为每个页面创建:
我创建了一个具有基本功能的应用程序(5页和导航栏),我已经有超过1500行代码和~40个文件.我认为这是完全不可维护的,但是我没有找到任何解决这个问题的方法.有几个框架(例如GWTP)实现了MVP,但它们也需要相同数量的样板.
我可以使用spring mvc或play在~200行中实现相同的功能.
我做错了什么,你会如何解决?
我正在构建一个Android应用程序,并希望以"干净架构"为基础,类似于以下作者的建议:
查看(片段)< - >演示者< - >交互者< - >存储库
在当前设计中,每个显示器有1个交互器(显示器可以包括多个片段,例如具有30个相同类型的片段的ViewPager)和每个片段1个呈现器.Presenter和Interactor没有框架依赖关系,可以轻松进行测试.
我主要关注的是Interactors/UseCases的实现及其与Presenters(MVP)或ViewModel(MVVM)的关系.
计划让Interactor首先获取显示所需的所有业务对象(BO).从数据层同步完成提取,并且每个接收到的BO都指向Presenter.这会导致延迟,直到视图中显示所有数据.
此外,它注册其感兴趣的BO的更新(与之前提取的相同),以通过演示者不断更新视图.
因此,我正在寻找如何在我的案例中设置Interactor的指南.上面提到的实现有一个任务,然后完成它,并且可以关闭Interactor后台线程.
在我的情况下,Interactor从数据层注册更新并等待处理它们,然后将数据发布到Presenter UI线程,因此只要有演示者监听就行.
这个功能是不同的,我正在寻找一个良好的做法,使其与"干净的架构"一起工作.
mvp ×10
winforms ×5
c# ×4
data-binding ×2
gwt ×2
gwt-mvp ×2
android ×1
architecture ×1
asp.net ×1
asp.net-mvc ×1
errai ×1
gwt-places ×1
java ×1
mvvm ×1