您的位置:首页 > 其它

MVP模式 -- 解决了实际项目的重用问题

2008-09-19 18:22 369 查看
最近我们的项目中有个winform的应用,是有关一些长任务操作,所以需要在用户UI上做些提示,这块部署成客户端的形式共用户使用。之前没考虑的太多,摘录一小段代码:

public partial class Flat : UserControl

{

public void Main()

{

BeginEdit();

}

public void BeginEdit()

{

AppendText("正在获取数据...");

dts = DateTime.Now;

HtmlOnSale = ChangePage(i);

BaseHelper.SaveGoodInfo(UserName);

}

public void AppendText(string text)

{

txtResult.Text += text + "\r\n";

txtResult.Refresh();

txtResult.SelectionStart = txtResult.Text.Length;

txtResult.ScrollToCaret();

txtResult.Focus();

}

}

大概代码长成这样,先不要关注里面代码的完好,因为只复制了一部分,里面带有红色标记的接下来会遇到麻烦。

当时代码虽然丑点,但还是可以满足需求的。最近加了个需求,需要在服务器端也部署一套这样的应用程序,但里面具体的业务操作是一摸一样的,但在UI上不需要操作显示状态;当然业务一摸一样,肯定是要重用的,所以就需要对这段代码重构,因为操作里面确实夹杂着很多的AppendText这样的调用,那把整块操作都搬到另外的类去是不行的,而且这个还是继承UserControl的,所以要满足这样的需求想到了MVP模式,赞不知道还有没有其他能用的上的,应该有,只是暂时没想到。

改成这样:多一个工程项目,再多个FlatPresenter类, 然后把这些操作搬到Presenter去,但Presenter怎么调用Flat的AppendText方法呢,再多一个IFlatView接口,AppendText作为接口的一个方法,然后Flat也继承IFlatView, public partial class Flat : UserControl,IFlatView{},这样子另外的这个程序就可以让他也继承IFlatView,改写AppendText不让他在UI上做操作就可以了,MVP除了提高测试率外,改进代码的可重用性也是很不错的。

改完的代码大概长这样:

public interface IFlatView

{

void AppendText(string text);

}

public partial class Flat : UserControl,IFlatView

{

FlatPresenter m_presenter = new FlatPresenter (this);

public void Main()

{

m_presenter.BeginEdit();

}

public void AppendText(string text)

{

txtResult.Text += text + "\r\n";

txtResult.Refresh();

txtResult.SelectionStart = txtResult.Text.Length;

txtResult.ScrollToCaret();

txtResult.Focus();

}

}

public class FlatPresenter

{

public FlatPresenter(IFlatView view)

{

m_View = view;

}

public void BeginEdit()

{

m_View.AppendText("正在获取数据...");

dts = DateTime.Now;

HtmlOnSale = ChangePage(i);

BaseHelper.SaveGoodInfo(UserName);

}

}

大概是这样的,问题总算解决了。呵呵,看大伙有没有更好的建议。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐