.NET应用架构设计—工作单元模式(摆脱过程式代码的重要思想,逆(2)

来源:未知 责任编辑:责任编辑 发表时间:2015-05-17 16:44 点击:

Order活动记录对象的字段部分。

namespace OrderManager.Business
{
    public partial class Order
    {
        public bool CheckOrder()
        {
            //执行部分业务验证工作
            if (this.OId <= 0) return false;

            return true;
        }
    }
}

Order活动记录对象主体,纯粹为了演示而用,包含了一个简单的判断业务逻辑。

namespace OrderManager.Business
{
    public partial class OrderProducts
    {
        public long OrderId { get; set; }

        public long PId { get; set; }

        public float Price { get; set; }
    }
}

订单商品部分字段。

namespace OrderManager.Business
{
    public partial class OrderProducts
    {
        public bool CheckProducts()
        {
            //执行部分业务验证工作
            if (this.OrderId <= 0) return false;

            return true;
        }
    }
}

每一个商品都包含了自己的逻辑验证。

我们接着看一下应用层入口方法是如何协调两个活动记录对象之间的业务操作和数据存储的。

namespace OrderManager
{
    using OrderManager.Business;
    using OrderManager.DataSource;

    public class OrderManagerController : ControllerBase
    {
        public bool AddOrder(Order order)
        {
            using (UnitOfWork unitOfWork = new UnitOfWork())
            {
                order.CheckOrder();//执行业务检查

                order.Products.ForEach(item =>
                {
                    item.CheckProducts();//执行每个活动记录对象的业务检查,这里也可以使用表模块来处理。
                });

                OrderGateway orderGateway = new OrderGateway(unitOfWork);
                var orderDbResult = orderGateway.AddOrder(order);//第一个数据库表操作

                OrderProductsGateway productGateway = new OrderProductsGateway(unitOfWork);
                var productDbResult = productGateway.AddOrderProducts(order.Products);//第二个数据库表操作

                if (orderDbResult && productDbResult)
                {
                    if (unitOfWork.Commit())
                    {
                        this.SendOrderIntegrationMssage(order);//发送成功集成订单消息

                        return true;
                    }

                    this.PushOrderProcessQueue(order);//将本次订单发送到处理队列中
                    return false;
                }

                this.LogBusinessException(order);//记录一个业务处理异常LOG,以备排查问题。
                return false;
            }
        }
    }
}
	
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • 用C#制作屏幕捕获程序
  • 遍历ArrayList易犯错误
  • 使用C#编写LED样式时钟控件
  • C#对XML操作:一个处理XML文件的类(1)
  • 怎样用C#实现完整文档打印功能
  • DataList嵌套问题 如何删除内层子DataList的记录
  • 使用c#+(datagrid控件)编辑xml文件
  • C#生成CHM文件(应用篇)之代码库编辑器(5)【总结、程序、源代码】
  • .NET简谈自定义事务资源管理器
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索 - 移动版 - 返回顶部
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1