在MVC/MVP/MVPC设计模式中,您将业务逻辑放在何处?不,我不是指ASP.NET MVC框架(又名"Tag Soup").
有人说你应该把它放在MVC/MVPC中的"Controller"或"Presenter"中.但是,其他人认为它应该是模型的一部分.
你觉得怎么样?为什么?
我刚刚为客户启动了一个新的GWT项目,我很想听听人们对各种GWT MVC架构的体验.在最近的一个项目中,我使用了GXT MVC以及自定义消息传递解决方案(基于Appcelerator的MQ).GXT MVC工作正常,但对GWT来说似乎有点过分,并且难以使用浏览器历史记录.我听说过PureMVC和GWTiger,但从未使用它们.我们的定制MQ解决方案工作得很好,但是很难用JUnit测试组件.
另外,我听说Google Wave(GWT应用程序)是使用Model-View-Presenter模式编写的.最近发布了一个示例MVP应用程序,但是看一下代码,它似乎并不直观.
如果您正在构建新的GWT应用程序,您将使用哪种架构?您选择的利弊是什么?
谢谢,
马特
我一直在阅读这些内容,它们在.NET世界中非常突出.为什么没有任何Web框架可以在Ruby,Python或PHP中实现任何这些模式?是因为它只适用于基于组件的框架,比如ASP.NET吗?或者他们采用它的速度很慢?
我有一个包含3个片段的活动,目前我使用的是ViewPager.我想实现MVP并在活动演示者和片段演示者之间进行通信,即:
但我不知道如何以官方方式做到这一点.我可以使用BusEvent,但我认为这不是一个好习惯.
在MVP模式中谁负责处理用户界面的点击?
例如,非MVP方法将是这样的:
counterButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
totalClicks++;
counterTextView.setText("Total clicks so far: "+totalClicks);
}
});
Run Code Online (Sandbox Code Playgroud)
使用MVP是onClick责任Presenter吗?或者View可以处理?
有人可以澄清一下吗?
阅读一段时间并观看Google IO视频后,我仍然对MVP与Activity和Places的关系感到困惑.
我找到了一段时间发布的帖子 - > GWT 2.2 MVP vs. GWT 2.1 Activities-Places
"MVP架构.MVP是概念,其中一个方法就是场所 - 活动框架"
我还听到"演示者类似于活动"
我们可以给出"没有MVP的活动和场所"
我们可以混合"活动和地方与MVP"
"MVP只不过是我们如何组织我们的项目,以便我们可以轻松地测试和组织代码"
然后我想弄清楚这样的东西 - > http://code.google.com/p/gwt-platform/
我真的很困惑.我想要一站式线程来结束所有的混乱.
我有这个奇怪的问题,我无法处理自己.设计为singleton的mvp-project模型中的类会导致InvalidCastException.在此代码行中找到错误源,其中反序列化对象被分配给类的实例变量:engineObject = (ENGINE)xSerializer.Deserialize(str);每当我尝试将一个UserControl添加到Form或不同的UC时,就会出现错误.我所有的UC都有一个特殊的演示者,可以访问上面提到的单例类的实例变量.这是我尝试在某处添加UC时得到的结果:
'System.TypeInitializationException:'MVP.Model.EngineData'的类型初始值设定项引发了异常.----> System.InvalidCastException:[A]引擎无法转换为[B]引擎.键入从A起源 'MVP.Model,版本= 1.0.0.0,文化=中立,公钥=空' 在位置上下文 'LoadNeither'"[...] \应用程序数据\漫游\微软\ VisualStudio的\ 9.0\ProjectAssemblies\uankw1hh01\MVP.Model.dll".B型在位置上下文 'LoadNeither' 从 'MVP.Model,版本= 1.0.0.0,文化=中立,公钥=空' 起源"[...] \应用程序数据\漫游\微软\ VisualStudio的\ 9.0\ProjectAssemblies\u_hge2de01\MVP.Model.dll" ...
所以我不知何故有两个程序集,它们不是从我的项目文件夹访问,而是从VS临时文件夹访问?我google了很多,只发现了这个:IronPython例外:[A]人不能被投射到[B]人.有一个解决方案,但首先它涉及IronPhyton,其次我不知道在我的项目中使用它?
如果你能在这里帮助我,那将是非常好的:-) thx
我正在用C#开发一个WinForms应用程序.我在GUI编程方面经验有限,而且我必须在飞行中学到很多东西.话虽这么说,这就是我正在建设的.
请参阅常规GUI查看以下链接:
GUI http://img227.imageshack.us/img227/1084/program0.jpg
现在,我已经完成了很多工作,但是在非常糟糕的自治设计模式中.我不知道该项目是否会达到一定的规模,因此,是时候进行一些重大的重构了.
我一直在研究GUI设计模式,我希望实现的模式是被动视图(参见http://martinfowler.com/eaaDev/PassiveScreen.html).我正在寻找一些如何将这些结合在一起的帮助.
背景:
1)根据用户在"TreeView"中单击的内容,左下角的"列表"将显示可填充"编辑器"区域的对象列表.这些对象可能是TextBox或DataGridView.用户切换列表以选择他/她想要在"编辑器"中看到的内容
2)该模型本质上是一个包含数据和配置文件的文件夹.有一个外部程序在给定目录上运行,创建输出文件/文件夹等.我正在开发的这个程序旨在以用户友好的方式有效地管理/配置这些对象
3)我一直在做的事情的问题是它几乎不可能测试,因此转向MVP-esque被动视图设计模式
我试图让它成为独立于View的程序.我无法找到任何更复杂的交互式视图与被动视图模式一起使用的示例.
问题:
1)我是否需要为程序的整个"外观"实现一个大的接口/视图,然后为每个TreeView,Editor,Logger等实现子接口/子视图?或者这样做有更好的"结构"吗?
2)当从视图"移交"事件到演示者/控制器时(无论你想使用什么术语WRT被动视图设计模式),我应该这样做的方式是什么?有时我有简单的属性需要更新,有时我需要一系列的步骤来展开.
我会喜欢这个主题的建议和意见.我已经浏览了互联网,但我没有找到足够的例子来帮助我继续这个项目.
提前致谢!
丹尼尔
我有一个关于如何在使用MVP时处理演示者之间的通信的问题.说我有两个MVP三合一.一个是产品清单(Triad A),另一个是关于当前所选产品(Triad B)的一些一般信息.
如何告知Presenter B它需要更新,因为所选产品已被A更改?我当然可以想办法做到这一点,但我想知道是否有一个如何处理这个问题的一般惯例.
提前感谢任何想法!
我正在使用MVP模式开发大规模应用程序.在开发过程中,我提出了是否应该使用组合或继承的问题.例如:让我们假设我有一个名为形式美孚与场一个和乙.在本申请的另一部分我有一个表格栏具有相同字段阿和乙但附加字段Ç.
目前,代码是使用继承方法编写的,其中表单Bar从表单Foo继承.然后,演示者处理与模型略有不同的数据.这很简单,但是如果遵循"是A"的经验法则,是否打败我,因为即使表格不同,它们也处理公共输入(A和B).
然而,在这里我一直在考虑"继承的构成"和Liskov替换原则,并认为我应该使用组合而不是继承.然而,因为我使用的是MVP,所以它比预期的要复杂得多,因为我必须有一个表格Foo的演示者,字段A和B,然后是一个带有字段C的Bar的演示者,以及对Foo的演示者的引用,以便它可以将字段A和B注入其中.
问题是它已被证明是更多的代码,因为我必须在Foo的演示者中添加一些排序getter和setter,以便能够将数据传递给Bar.如果我打破MVP以提供作曲,这感觉就像某种程度.
所以我的问题是:
对于我的情况,使用组合而不是继承是否真的更好?为什么?
使用组合"打破"MVP?
mvp ×10
android ×2
c# ×2
gwt ×2
puremvc ×2
architecture ×1
assemblies ×1
composition ×1
exception ×1
gwt-places ×1
inheritance ×1
java ×1
mvvm ×1
passive-view ×1
winforms ×1