标签: mvp

单元测试前端逻辑

我们已经尝试在最近的项目中引入单元测试前端逻辑,并且测试的价值受到质疑.

我们没有对代码进行代码审查,因此它们的质量很差,开发人员复制了不良测试,创建了更糟糕的测试,因此我们进行了大量的垃圾测试.

我仍然相信测试演示者(我们使用MVP)是有价值的,但让人们参与其中比我原先想象的要困难得多.

我怎样才能让人们认为前端测试是有价值的,有没有人有任何好的资源指向我,支持我这个?

谢谢...

testing tdd mvp agile unit-testing

14
推荐指数
1
解决办法
7684
查看次数

MVC模式中的控制器和MVP模式中的演示者之间有什么区别?

MVC模式中的控制器和MVP模式中的演示者之间有什么区别?您能否提供链接以了解这两者的优点和使用方案?

model-view-controller mvp design-patterns

14
推荐指数
2
解决办法
7013
查看次数

GWT MVP与地方和活动 - 模型在哪里?

我正在努力熟悉GWT开发的"地点和活动"设计模式,到目前为止我认为它有很大的潜力.我特别喜欢这样一种方式,一旦你开始考虑你的应用程序的"地方",浏览器历史几乎只是在你的大腿上,几乎没有额外的努力.

然而,有一件事让我感到困扰:到目前为止我看到的所有文章和代码示例都掩盖了一个(就我而言,主要的)方面:'MVP'的'M'部分,即模型!

在普通的MVP架构中,据我所知,Presenter拥有对Model的引用,并负责根据UI事件更新它,或者根据Model更改更新UI.

现在,在"P&A"的所有文章/样本中,活动似乎取代了Presenter,但与"普通"主持人不同,他们会在新地方到达时被丢弃并重新创建,因此他们可以'是存储客户端状态的那个,或者每次都会丢失.活动起来很便宜,所以这不是一件麻烦事,但我不想一遍又一遍地创建复杂应用程序的模型.

所有样本都相当简单,并且没有太多的状态,因此只是忽略了Model方面,但是实际的,复杂的应用程序在哪里存储它的状态?

mvp gwt

14
推荐指数
2
解决办法
4445
查看次数

MVP Android - 有多少主持人?

我有一个快速的问题.我正在努力(并努力)用MVP设计模式设计我的应用程序.

我可以问,对于每个视图(活动,片段)我应该有一个单独的演示者类吗?

我在网上看到的资源并不多,显然有样本说明了MVP.如果他们有一些人可以共享吗?

PS我也在这个应用程序中使用RecyclerViewAdapter所以任何关于它的指针将不胜感激

提前致谢

mvp android

14
推荐指数
2
解决办法
2469
查看次数

批评我简单的MVP Winforms应用程序

我试图围绕C#/ Winforms应用程序中使用的MVP模式.所以我创建了一个简单的"记事本",就像应用程序一样,试图找出所有细节.我的目标是创建一些东西来执行打开,保存,新的经典窗口行为,以及在标题栏中反映已保存文件的名称.此外,当有未保存的更改时,标题栏应包含*.

所以我创建了一个视图和一个管理应用程序持久性状态的演示者.我考虑过的一个改进是打破文本处理代码,以便视图/展示者真正是一个单一用途的实体.

这是一个参考屏幕截图...

替代文字

我在下面列出了所有相关文件.我对我是否以正确的方式完成它或者是否有改进方法的反馈感兴趣.

NoteModel.cs:

public class NoteModel : INotifyPropertyChanged 
{
    public string Filename { get; set; }
    public bool IsDirty { get; set; }
    string _sText;
    public readonly string DefaultName = "Untitled.txt";

    public string TheText
    {
        get { return _sText; }
        set
        {
            _sText = value;
            PropertyHasChanged("TheText");
        }
    }

    public NoteModel()
    {
        Filename = DefaultName;
    }

    public void Save(string sFilename)
    {
        FileInfo fi = new FileInfo(sFilename);

        TextWriter tw = new StreamWriter(fi.FullName);
        tw.Write(TheText);
        tw.Close();

        Filename = fi.FullName;
        IsDirty = …
Run Code Online (Sandbox Code Playgroud)

c# model-view-controller mvp design-patterns winforms

13
推荐指数
1
解决办法
4885
查看次数

MVP与MVVM - 为什么?

当我使用WinForm时,我正在使用MVP.但是当我开始使用WPF或Silverlight时,我转向了MVVM.

我注意到的唯一事情是,由于强大的绑定,我们不需要在MVVM模式中同步View和ViewModel之间的数据.

我的问题是:

1)绑定(这有助于我们不手动同步View和ViewModel)使用MVVM的唯一优势是什么?

2)MVVM相对于MVP还有其他优势吗?有什么区别?

3)下面的代码是MVVP模式还是MVVM或两者兼而有之?

interface IView {

  void ShowMessage(string message);

}

class View : IView {
    public void ShowMessage(string message){
              MessageBox.Show(this, message);
    }
}

class ViewModel{

private IView view;

public ViewModel(IVew view){

  this.view = view;

}

........

view.ShowMessage("This is a msg");

}
Run Code Online (Sandbox Code Playgroud)

mvp design-patterns mvvm

13
推荐指数
3
解决办法
1万
查看次数

无法通过延迟绑定创建服务实例

我一直在尝试使用mvp4g框架构建GWT/Google App Engine Web应用程序.

我一直收到错误的错误,无法通过延迟绑定创建我的服务实例.

我的Acebankroll.gwt.xml文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<module rename-to='acebankroll'>
    <inherits name='com.google.gwt.user.User'/>
    <inherits name="com.google.gwt.i18n.I18N"/>
    <inherits name='com.google.gwt.user.theme.standard.Standard'/>  
    <inherits name='com.mvp4g.Mvp4gModule'/>
    <entry-point class='com.softamo.acebankroll.client.AceBankroll'/>
     <source path='client'/>  
</module>
Run Code Online (Sandbox Code Playgroud)

我的入门模块如下:

public class AceBankroll implements EntryPoint {
    public void onModuleLoad() {
        Mvp4gModule module = (Mvp4gModule)GWT.create( Mvp4gModule.class );
        module.createAndStartModule();
        RootPanel.get().add((Widget)module.getStartView());
    }
}
Run Code Online (Sandbox Code Playgroud)

错误跟踪

我发布完整的错误跟踪作为答案.

常见问题和试用

我已经读过,下一个常见错误列表可能会导致此错误:

  • ServiceAsync接口具有返回值的方法.这是错误的,所有方法都需要返回void.

  • Service接口不扩展RemoteService接口.

  • ServiceAsync接口中的方法错过了AsyncCallback的最后一个参数.

  • 两个interfaced,ExampleService和ExampleServiceAsync上的方法不完全匹配(除了返回值和AsyncCallback参数)

我检查了上述所有条件,但未发现问题.

如何在演示者中插入您的服务?

这是一个片段,说明我如何在演示者类中注入服务.

protected MainServiceAsync service = null;
@InjectService
public void setService( MainServiceAsync service ) {
    this.service = service;
}
Run Code Online (Sandbox Code Playgroud)

你有所需的图书馆吗? …

mvp gwt google-app-engine

13
推荐指数
1
解决办法
1万
查看次数

Clojure GUI编程很难

我正在使用Swing GUI编写实用程序.我正在尝试使用Martin Fowler的演示模型来促进测试.我的应用程序将使用java.util.prefs.Preferences(即:主窗口位置和大小)自动存储多个用户首选项.我花了几个小时在周末试图创建一个PreferencesAPI 的Clojure模拟(使用EasyMock),以便我可以测试我的演示者代码,但无法使其工作.使用非OO风格的Clojure GUI编程对于长期的OO程序员来说很难.我觉得如果我能发现/开发这些东西的模式(模拟,视觉"类"的"接口"等),我可以继续在整个应用程序的其余部分使用相同的模式.

我也在Scala中开发相同的应用程序来比较编程模式并发现它更加直观,即使我试图以相当严格的函数风格使用Scala(当然不包括调用Java类,如Swing API - 它在Clojure版本中具有相同的可变性问题,但当然也将是单线程的).

在我的Scala代码中,我创建了一个名为MainFrame扩展JFrame并实现特征的类MainView.MainView将所有JFrame调用公开为抽象方法,我可以在模拟对象中实现:

trait LabelMethods {
  def setText(text: String)
  //...
}

trait PreferencesMethods {
  def getInt(key: String, default: Int): Int
  def putInt(key: String, value: Int)
  //...
}

trait MainView {
  val someLabel: LabelMethods
  def addComponentListener(listener: ComponentListener)
  def getLocation: Point
  def setVisible(visible: Boolean)
  // ...
}

class MainFrame extends JFrame with MainView {
  val someLabel = …
Run Code Online (Sandbox Code Playgroud)

mvp scala clojure mocking

13
推荐指数
2
解决办法
3099
查看次数

asp.net MVC和MVP之间的区别?他们俩都一样吗?

我想知道asp.NET MVC和MVP之间的区别,它们是否相同?下面是我提到的架构图.

(图片网址:http://msdn.microsoft.com/en-us/library/ff647859.aspx)

MVC与MVP

我从图中看到MVC和MVP之间的主要区别是,在MVC中模型更新视图,在MVP中,Presenter更新视图.

但这是我的困惑.Below是一个asp.net MVC代码示例.

public class HomeController : Controller
    {
        //
        // GET: /Home/

        public ActionResult Index()
        {
            return View();
        }

    }
Run Code Online (Sandbox Code Playgroud)

这里Controller返回/更新视图,所以现在根据图表它是MVP

asp.net mvc和MVP是否相似?如果没有什么区别?有人可以指导我.

mvp asp.net-mvc

13
推荐指数
1
解决办法
1万
查看次数

Realm,RxJava,asObservable()和doOnUnsubscribe()

在我的Android项目中,我使用realm作为我的数据存储引擎.我喜欢它!
我也使用RxJava,因为它使"线程化"变得如此简单,我真的很喜欢整个"反应性思维".我喜欢它!

我使用MVP模式+一些"清洁架构"的想法来构建我的应用程序.

Interactors是唯一知道的人Realm.我在Observable的帮助下公开数据,如下所示:

@Override
public Observable<City> getHomeTown() {
    final Realm realm = Realm.getDefaultInstance();
    return realm.where(City.class).equalTo("name", "Cluj-Napoca").findAllAsync().asObservable()
            .doOnUnsubscribe(new Action0() {
                @Override
                public void call() {
                    realm.close();
                }
            })
            .compose(new NullIfNoRealmObject<City>());
}
Run Code Online (Sandbox Code Playgroud)

问题是我doOnUnsubscribe的副作用被调用之前Realm可以做它的事情,处理暴露的observable:

Caused by: java.lang.IllegalStateException: This Realm instance has already been closed, making it unusable.
at io.realm.BaseRealm.checkIfValid(BaseRealm.java:344)
at io.realm.RealmResults.removeChangeListener(RealmResults.java:818)
at io.realm.rx.RealmObservableFactory$3$2.call(RealmObservableFactory.java:137)
at rx.subscriptions.BooleanSubscription.unsubscribe(BooleanSubscription.java:71)
at rx.internal.util.SubscriptionList.unsubscribeFromAll(SubscriptionList.java:124)
at rx.internal.util.SubscriptionList.unsubscribe(SubscriptionList.java:113)
at rx.Subscriber.unsubscribe(Subscriber.java:98)
at rx.internal.util.SubscriptionList.unsubscribeFromAll(SubscriptionList.java:124)
at rx.internal.util.SubscriptionList.unsubscribe(SubscriptionList.java:113)
at rx.Subscriber.unsubscribe(Subscriber.java:98)
at rx.subscriptions.CompositeSubscription.unsubscribeFromAll(CompositeSubscription.java:150)
at …
Run Code Online (Sandbox Code Playgroud)

mvp android realm rx-java

13
推荐指数
1
解决办法
3260
查看次数