MVP模式 -- 解决了实际项目的重用问题
最近我们的项目中有个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);
}
}
大概是这样的,问题总算解决了。呵呵,看大伙有没有更好的建议。
posted on 2008-09-19 18:22 yihui.huang 阅读(2270) 评论(12) 编辑 收藏 举报