我对这两个编程模式有点困惑:MVC和MVP.
它们之间的主要区别是什么?我一直在网上搜索,我做了两个例子,但是我更加困惑,因为在一些示例网页中,MVP使用2个以上的界面来将展示者与视图层进行通信(有些是甚至有完全空白的接口,只有声明),但在其他接口只需要两个接口就可以将数据从演示者传输到视图.应用该模式的正确方法是什么?
另一方面,我一直在研究MVC,但直到现在,我才意识到,也许我一直在以错误的方式应用模式.我有这个:
我希望你能清除我的怀疑.提前致谢.
我计划在我的新Android项目中使用MVP模式.我已经做了一些示例代码,我想知道,我是否正确实现了它?请对代码发表评论并发布您的建议.
我的活动类我从我的BaseView类扩展它,我正在实现一个接口.此活动只是在新线程中调用Web服务并更新textview中的值.
public class CougarTestView extends BaseView implements ICougarView,
OnClickListener {
CougarTestPresenter _presenter;
public String activityName = "CougarHome";
/** Called when the activity is first created. */`enter code here`
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState, activityName);
setContentView(R.layout.main);
_presenter = new CougarTestPresenter(this);
getSubmitBtn().setOnClickListener(this);
getCallInfoBtn().setOnClickListener(this);
}
private Button getCallInfoBtn() {
return (Button) findViewById(R.id.btn_callinfo);
}
public void setServiceValue(String retVal) {
// TODO Auto-generated method stub
getResultLabel().setText(retVal);
setPbar(false);
// toastMsg(retVal);
}
public void ResetPbar() {
getProgressBtn().setProgress(0);
}
public void setProcessProgress(int progress) {
if …Run Code Online (Sandbox Code Playgroud) 我主要来自ASP.Net背景和一些MVC.我还做了一点Silverlight和MVVM,但是我现在要进入Winforms,我很少有经验,所以我想知道如何解决MVP问题.
典型的MVP示例显示了演示者设置视图属性(通过某种IView接口),具体视图将该属性值放入文本框中.而不是这种古老的方法,可以在MVP中使用INotifyPropertyChanged,如果是,如何?一个非常快速的例子非常有用!
如果我要创建一个实现INotifyPropertyChanged的模型,那么这不是更像MVVM吗?(即演示者更新模型,并通过INotifyPropertyChanged的魔力更新视图).然而,在我读过有关MVVM和Winforms的各个地方,人们都认为它不合适.为什么?我的理解是你可以对任何控件的属性进行数据绑定,那么Winforms缺少什么?我试图理解Winforms中数据绑定与WPF相比的缺点,以及为什么不能使用MVVM,因为它似乎比MVP更容易实现.
在此先感谢安迪.
我有一个在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模式实现我的下一个应用程序,所以我开始阅读一些关于如何实现它的文章.对我来说,主要的问题是这种模式有不同的方法.有些人说我们应该将活动视为一种观点,而另一些人则认为活动应该是一种主持人.
此处描述了作为视图的活动:MVP Android ,它是有道理的.但另一方面,我发现这个答案有几个upvotes /sf/answers/532696041/,有人说活动应该是主持人.
有没有人有这种模式的经验?
我正在尝试遵循MVP模式.但是,我对如何在这种模式下处理适配器和视图持有者有一些疑问.
我应该使用适配器作为演示者吗?有业务逻辑吗?
或者我应该传递处理列表逻辑的演示者实例,然后在与适配器元素进行任何交互时调用演示者的方法?
谢谢
任何人都可以告诉我,根据MVP架构,我应该在我的应用程序中放置AlertDialogs?我应该将它们留在我的活动中还是放到演示者手中?
哪个更好,将谷歌分析代码放在演示者中或将其保留在活动中?
当用户点击视图上的按钮时,我发现自己需要播放声音文件.
MediaPlayer需要创建上下文.
放置MediaPlayer初始化代码的最佳方法是什么?
我应该将上下文传递给演示者方法并在那里播放吗?
或者只是在视图上播放是可以的.
我一直在研究 MVC/MPV/MVVM 的优缺点,一个共同的主题是 MVC 比 MVP 和 MVVM 更难进行单元测试,但我不完全理解为什么。
根据我目前的理解,在 MVC 中,视图依赖于模型和控制器,因此要测试视图,必须模拟控制器和模型。MVP/MVVM 如何改进?