- public class Pay : IPay
- {
- public bool PayMent(Rule.Product product)
- {
- //具体的下单操作
- Rule.Order order = new Rule.Order();
- //持久化操作
- order.Add(product);
- //发送手机短信,发送给卖家,通知有人买什么产品等
- SendMessage.Instance.SendMsg(string.Empty, string.Empty);
- return true;
- }
- #region IPay 成员
- public void IPay.Pay(Rule.Product product)
- {
- this.PayMent(product);
- }
- #endregion
- }
那么上面我们在服务层组合多个简单的服务提供给一个方法,那么UI层只要简单的调用服务层接口中提供的方法即可,就能完成服务的调用。我们来看看UI层的代码
- public class Order
- {
- public void Pay()
- {
- Service.PayFactory factory=new Service.PayFactory();
- //调用服务层中的支付
- Service.IPay pay = factory.CreatePay();
- //这里只是测试,所以没有屏蔽New的代码
- pay.Pay(new Rule.Product());
- }
- }
那么通过上面的简单形式我们就完成了一个简单的装饰模式的服务层的设计,是不是很简单呢?可能看起来代码有点多,不过这样的设计很利于我们在后期的扩展
性和适应性,特别是等到系统的功能更复杂更多时。好的设计就能体现出它的价值了。
当然上面我们通过了直接使用领域模型中的对象作为数据传输,当然我们可以通过数据传输对象的自定义对象来完成,情况更好,我这里就不举例说明了,下面我
们来讲述下一个模式:传输对象模式。
498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="/uploadfile/201301/12/1412211467.png" />
那么我们前面也讲过了数据传输对象,其实这个模式只是讲解了数据传输对象的用法。
传输对象模式:
该模式主要是针对系统中各分层之间的数据传输模式的设计,通过传输对象可以降低各层之间分发数据的次数,提高系统性能,通常来说该模式非常有用。但是也
有它的弊端。比如说当领域模型太多的时候,如果把领域模型中的每个对象的数据载体,都设计成传输对象,那么系统将是一个非常庞大的工程,因为过度设计,让系
统难于维护与控制。我们来总结下使用该模式的优缺点:
498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="/uploadfile/201301/12/FA12211512.png" />
那么有优点肯定就有缺点,我们来看看传输对象可能带来的劣势:
498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="/uploadfile/201301/12/6D12211901.png" />
现在目前我们在使用数据传输对象的时候,都必须手动的去维护及创建,目前没有比较好的工具去完成自动创建的功能。比如说能将同一个对象,根据不同UI的需
求自动的将一些属性屏蔽或者启用等。可能通过XML配置文件来完成会是可行的方案,不过目前还没有一个比较好的工具去自动的根据领域模型中的对象自动的创建传
输对象,然后还能提供这个传输对象根据不同UI界面要求完成不同的自定义配置功能,希望各位如果了解的可以给小弟指点下,跪求!
传输对象模式我想具体的实例代码我就简单的书写下吧,就是把对象中的行为去掉,只包含数据信息,就和我们平时说的3层结构中的Model层一样,只有get;set;
访问器和私有成员变量,我们来看看实例代码吧?
- /// <summary>
- /// 产品信息
- /// </summary>
- public class Product
- {
- private int _pro_id;
- private string _pro_property = string.Empty;
- private string _pro_cid;
- private int? _pro_brandid;
- private string _pro_name;
- private string _pro_model;
- /// <summary>
- /// 产品ID
- /// </summary>
- public int pro_ID
- {
- set
- {
- _pro_id = value;
- }
- get
- {
- return _pro_id;
- }
- }
- /// <summary>
- /// 扩展属性值
- /// </summary>
- public string pro_Property
- {
- set
- {
- _pro_property = value;
- }
- get
- {
- return _pro_property;
- }
- }
- /// <summary>
- /// 商品分类
- /// </summary>
- public string pro_CID
- {
- set
- {
- _pro_cid = value;
- }
- get
- {
- return _pro_cid;
- }
- }
- /// <summary>
- /// 商品品牌
- /// </summary>
- public int? pro_BrandID
- {
- set
- {
- _pro_brandid = value;
- }
- get
- {
- return _pro_brandid;
- }
- }
- /// <summary>
- /// 商品名称
- /// </summary>
- public string pro_Name
- {
- set
- {
- _pro_name = value;
- }
- get
- {
- return _pro_name;
- }
- }
- /// <summary>
- /// 商品型号
- /// </summary>
- public string pro_Model
- {
- set
- {
- _pro_model = value;
- }
- get
- {
- return _pro_model;
- }
- }
- }
我