Welcome

首页 / 软件开发 / .NET编程技术 / Enterprise Library深入解析与灵活应用(3):倘若将Unity、PIAB、Exception Ha

Enterprise Library深入解析与灵活应用(3):倘若将Unity、PIAB、Exception Ha2010-08-18 cnblogs artechEnterprise Library深入解析与灵活应用(3):倘若将Unity、PIAB、Exception Handling引入MVP模式

最近在做一个Smart Client Software Factory的项目。熟悉SCSF或者CAB的都应该很清楚MVP这种设计模式。MVP是MVC的一种变体,View和 Mode分别关注于UI的呈现和业务模型,View和Mode完全分离,View通过Presenter实现对业务模型的访问,Presenter“间接”地调 用View实现对UI的操作。对于MVP中的异常处理,我们是直接通过Enterprise Library的Exception Handling Application Block来实现的。具 体的做法是:在View中的每个控件的事件中添加try/catch block, 并在catch中通过ExceptionPolicy实现对异常的处理。这样导致的问题是 ,相同的代码重复散布于整个应用的各个角落,所以我又这样的想法:通过Policy Injection以AOP的方式实现对异常的处理,当有了这个想法 后,我又多想了一步,何不再将Unity也一并整合进来。

一、MVP简介

为了让一些没有接触过MVP的读者能够理解后续的内容,我 先对MVP做一个简单的介绍。如下图所示:MVP有点类似于我们熟悉的MVC, View负责实现对UI的呈现已经与用户进行交互,在CAB中,View一般 通过一个User Control来实现, Mode关注于具体的业务模型,独立于View和Presenter。View具有一个Presenter的引用,当View需要调用Mode 的时候(比如需要访问Mode传入查询条件获取数据),通过Presenter访问Mode。对于Presenter来说,它需要对View进行操作(比如数据成功 获取后,将其显示到View中),但是Presenter并不会“直接”对View本身进行引用,而是引用View的接口(IView),所以View对 象是一个不稳定的对象,而Presenter仅仅需要View中一些固定的操作,所以对将这些操作定义在IView interface中,将对View的依赖转化成 对IView的依赖,这也充分体现了面向结构变成的原则。

二、模拟简单的MVP

接下来我们通过一个简单的场景来模拟MVP。这是我常用的计算器的例子,整体的构成如下图所示:

1、ICalculator:Calculator的接口,定义 了一个用于进行除法运算的操作

namespace Artech.UnityInMVP
{
public interface ICalculator
{
int Divide(int op1, int op2);
}
}

2、Calculator:实现了ICalculator接口

namespace Artech.UnityInMVP
{
public class Calculator:ICalculator
{
public int Divide(int op1, int op2)
{
return op1 / op2;
}
}
}