我正在编写一个Swing应用程序,并且在我之前的问题中,已经决定使用Model-View-Presenter模式将用户界面与业务逻辑分开.
当我的应用程序启动时,它执行以下代码:
Model model = new BasicModel();
Presenter presenter = new Presenter(model);
View view = new SwingView(presenter);
presenter.setView(view);
presenter.init();
Run Code Online (Sandbox Code Playgroud)
这会创建用户界面.事件由View,生成,并委托给Presenter.在Presenter随后操纵Model和更新View相应.
为了处理某些事件,我需要从用户那里获得更多信息.在这些事件的情况下,我认为Swing视图适合生成一个新JDialog窗口.
一种思路让我觉得这可能是orignal中适当的代码Presenter:
public void handlePreferences() {
Preferences prefs = view.getPreferences();
model.setPreferences(prefs);
}
Run Code Online (Sandbox Code Playgroud)
也就是说,每个内容JDialog应该代表一个不同的对象,应该从中检索View并更新Model.但是,这留下了一个问题:我是否创建了一个Model表示Preferences对象的新对象和一个Presenter用于事件处理的新对象JDialog?
在我看来,如果我想改变UI以使用JSF,那么创建一个新的Presenter和Model原始内部会View迫使我做很多工作,如果我想更改UI以使用JSF.
请随时添加评论以便澄清.
我最近经常遇到的一个问题是我的演示者课程变得太大了.通常,我可以在不跳过节拍的情况下切断常规的大班.但是主持人有时候会更难以削减,而不会让代码更难以遵循.
特别是当页面开始填充CRUD导向控件时.有时我将控制分开,但如果它们受到其他控制的影响,协调逻辑本身就很复杂.有时我将列表或网格数据检索分开,但有时候会有类似的陷阱.
是否有任何技术,或经验法则或您从演示者中重构的公共区域?
根据我对mvvm的理解.
有一个模型(实体类也实现inotify ...),视图(xaml代码)和一些类作为vm(通常继承icommand的控制器类型)让我们在特定事件上生成事件/命令. .
我只是想知道viewmodel类和类后面的xaml代码之间的区别...为什么我们不单独考虑和增强代码...
在我的脑海里没有相当的理由证明这一点......
或者请用例子来写清楚mvvm ...以及为什么mvc或mvp对于wpf app来说是地狱????
几乎没有架构经验,我正在尝试为.NET 4平台设计一个DRY KISS解决方案,采用MVP方法,最终将实现为桌面(WinForms)和Web(ASP.NET或Silverlight)产品.我曾经做过一些MVC,MVVM的工作,但由于某种原因,我很难绕过这个特定的一个,所以为了抓住模式,我决定从最简单的样本开始问你们一些帮助.
所以假设一个非常简单的模型如下(在实践中它绝对是一个WCF调用):
internal class Person
{
internal string FirstName { get; set; }
internal string LastName { get; set; }
internal DateTime Born { get; set; }
}
public class People
{
private readonly List<Person> _people = new List<Person>();
public List<Person> People { get { return _people; } }
}
Run Code Online (Sandbox Code Playgroud)
我在想:
最后:任何机会都有一个完善的,可测试的,轻量级的框架来实现这一目标吗?
我在一个我继承的大型应用程序中工作,并且遇到了一些最佳实践问题.
每次用户导航到"我们的客户编辑"页面时,都会创建一个新的演示者,并设置一个视图.有一个主要的客户编辑演示者和一个主视图.主视图中还有子视图,由主演示者的子演示者使用.在子演示者中,我在事件总线上注册事件处理程序.
我遇到的问题是,当第二次导航到联系人编辑器时,会再次创建演示者,并再次注册这些事件.现在,当一个事件发生时,它会被处理两次,每个presenter实例一次.
演示者不会被变量保留,但子视图由主视图引用.可能是视图中的这个引用是否阻止事件处理程序被删除?我的印象是,如果该对象被垃圾收集,将删除事件处理程序.如果不是这种情况,我应该从事件总线取消注册这些事件处理程序吗?
更新:演示者没有被垃圾收集.如果我可以修改代码以在不再需要它们时删除对这些演示者的所有引用,它们是否会被收集,因此将删除事件处理程序?
我想在Facebook上的应用程序中分享这个URL:http: //www.example.com/#!v; id = NH1NlYov3bKJ
:但是,它会自动替换 http://www.example.com/?_escaped_fragment_=v%3Bid%3DNH1NlYov3bKJ
此URL错误,并且未从网页中检索正确的标题,说明和图片.我能做什么?谢谢
如果我有两个对象,即Fruit' andColor`及其定义如下:
public class Fruit
{
public int FruitId { get; set; }
public string Name { get; set; }
public Color Color { get; set; }
}
public class Color
{
public int ColorId { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如何将的集合绑定Fruit (e.g. List<Fruit>)到DataGridView?结果输出将类似于以下内容:
+-----+--------+----------+
| Id | Name | Color |
+-----+--------+----------+
| 10 | Apple | Red |
| 20 | Orange | Orange |
| 30 | …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用改装2,匕首2和MVP来创建一个简单的应用程序,但是我很难依赖,实际上,这是我尝试重建项目后得到的错误错误:任务执行失败':app:compileDebugJavaWithJavac ".
java.lang.StackOverflowError的
以及我提供AppComponent的App类:无法解析符号'DaggerAppComponent'
我将尝试向您展示我的项目是什么样的,这样有人可以看到问题,第一个是我的AppModule,其中包括PresentationModule.class
@Module(includes = PresentationModule.class)
public class AppModule {
private App app;
public AppModule(App app) {
this.app = app;
}
@Provides
@Singleton
public App provideApp() {
return app;
}
}
Run Code Online (Sandbox Code Playgroud)
演示模块如下所示:
@Module(includes = InteractorModule.class)
public class PresentationModule {
@Provides
JokePresenter providePresenter(JokeInteractor jokeInteractor) {
return new JokePresenterImpl(jokeInteractor);
}
}
Run Code Online (Sandbox Code Playgroud)
和InteractorModule:
@Module(includes = {NetworkModule.class, PresentationModule.class})
public class InteractorModule {
@Provides
JokeInteractor provideJokeInteractor(RetrofitService service, JokePresenter presenter) {
return new JokeInteractorImpl(service, presenter);
}
}
Run Code Online (Sandbox Code Playgroud)
这是JokePresenter,它具有对视图和交互器的引用:
public class JokePresenterImpl implements JokePresenter { …Run Code Online (Sandbox Code Playgroud) 我正在开发一个由3个主要部分组成的Android测试项目,每个部分都是按照MVP模式开发的.这些部分互相嵌套,我想知道我所遵循的策略是否正确/最好
结构体:
每个部分都使用MVP结构(例如,对于Book I制作了BookPresenter,BookView和BookModel,对于Page和Item也是如此)
作为用户案例,我想跟踪用户点击按钮的次数,并且每次将页面背景更改为随机颜色,当用户到达第10次点击时,告诉BookPresenter转到第二页.
为此我设置了这样的东西
在所有这些中,BookPresenter具有对PagePresenter的引用,并且PagePresenter具有对ItemPresenter的引用,因此当需要执行某些操作时,它们可以与结构中的子或父呈现器进行通信.
现在的问题 是:这是建立具有嵌套MVP的系统的正确方法吗?因为如果我想要一个PageView而不是在Book中我需要将它放在一个Newspaper(其他具有Book的替代行为的类)中,我仍然需要使用Presenters和其他所有其他类重新创建依赖关系链. ...
一位来自这里的人告诉我,MVVM比MVP更好,他告诉了我很多专家和很多竞争者,但是我想知道我的MVP是否做得很好,或者您是否知道其他任何方式可以转换为MVVM。这是使用Google MVP登录。我不会放置所有代码,但会放置文件夹和少量解释:
-模型
-主持人
createGoogleClient(),signIn(),onActivityResult(),onStop(),onStart(),onDestroy()所有的这些方法都是从我interface内同一个包IGoogleSignIn-视图
然后在MainActivity中调用方法...
我想知道在MVVM上执行此操作有何不同?更改会有什么变化?这还不是很好吗?
mvp ×10
android ×3
java ×3
gwt ×2
mvvm ×2
winforms ×2
ajax ×1
android-mvp ×1
architecture ×1
asp.net ×1
c# ×1
c#-4.0 ×1
dagger-2 ×1
decoupling ×1
event-bus ×1
facebook ×1
refactoring ×1
swing ×1
url ×1
wpf ×1