• DDD_Demo


    现在是挖个坑,实验阶段

    
    --Domain
       --OrderAggregateRoot
         --Order.cs
         --OrderItem.cs
         --ValueObject
         --Event
    
        public class Order : AggregateRoot<Guid>
        {
            #region 属性
    
            /// <summary>
            /// 订单号
            /// </summary>
            public string OrderNo { get; private set; }
    
            /// <summary>
            /// 是否删除
            /// </summary>
            public bool IsDelete { get; private set; }
    
            public CreateUserInfo CreateUser { get; private set; }
    
            /// <summary>
            /// 子订单数
            /// </summary>
            public int TotalItemCount { get; private set; }
    
            private List<OrderItem> _orderItems = new List<OrderItem>();
    
            public IReadOnlyList<OrderItem> OrderItems => _orderItems;
    
            #endregion
    
            #region 构造函数
    
            private Order()
            {
    
            }
    
            private Order(string orderNo, CreateUserInfo createUserInfo, List<OrderItem> items)
            {
                this.CreateUser = createUserInfo;
                this.OrderNo = orderNo;
                this._orderItems = items;
    
                RestTotalCount();
    
                Check.NotNull(this.CreateUser, "用户不能为空!");
            }
    
            #endregion
    
    
            #region 对外公开方法
    
    
            internal Order CreateOrder(string orderNo, Guid userId, CreateUserInfo createUserInfo, List<OrderItem> items)
            {
    
                return new Order(orderNo, createUserInfo, items);
            }
    
            /// <summary>
            /// 设置删除(删除改为未删除,未删除改为删除) 修改状态的同时把
            /// </summary>
            internal void SetIsDelete()
            {
                this.IsDelete = !this.IsDelete;
            }
    
            /// <summary>
            /// 修改子订单数量
            /// </summary>
            internal void SetOrderItemCount(Guid itemId, int count)
            {
                var orderItem = this._orderItems.FirstOrDefault(p => p.Id == itemId);
                Check.NotNull(orderItem, "未找到此子订单");
                orderItem.SetCount(count);
                RestTotalCount();
            }
    
            #endregion
    
            #region 私有方法
    
            /// <summary>
            /// 重新计算订单的总子订单数
            /// </summary>
            private void RestTotalCount()
            {
                this.TotalItemCount = this._orderItems.Sum(p => p.Count);
            }
    
            #endregion
        }
    
    
    
        public class OrderItem : Entity<Guid>
        {
            /// <summary>
            /// orderId
            /// </summary>
            public Guid OrderId { get; private set; }
    
            /// <summary>
            /// 商品名称
            /// </summary>
            public string ProductName { get; private set; }
    
            /// <summary>
            /// 商品数量
            /// </summary>
            public int Count { get; private set; }
    
            private OrderItem()
            {
    
            }
    
            public OrderItem(Guid orderId, string productName, int count)
            {
                OrderId = orderId;
                ProductName = productName;
                Count = count;
            }
    
            /// <summary>
            /// 设置子订单数
            /// </summary>
            public void SetCount(int count)
            {
                this.Count = count;
            }
    
    
    
        public class CreateUserInfo : Volo.Abp.Domain.Values.ValueObject
        {
            /// <summary>
            /// 用户Id
            /// </summary>
            public Guid UserId { get; private set; }
    
            /// <summary>
            /// 用户姓名
            /// </summary>
            public string UserName { get; private set; }
    
            /// <summary>
            /// 用户此订单预留手机号
            /// </summary>
            public string Tel { get; private set; }
    
            /// <summary>
            /// 收件地址(应该作为一个值对象(省市区Code))
            /// </summary>
            public string Address { get; private set; }
    
    
            private CreateUserInfo()
            {
                
            }
    
            internal CreateUserInfo(Guid userId, string userName, string tel, string address)
            {
                this.UserId = userId;
                this.UserName = userName;
                this.Tel = tel;
                this.Address = address;
    
                Check.NotNullOrWhiteSpace(userName, "用户姓名不能为空");
                // ...
            }
    
            protected override IEnumerable<object> GetAtomicValues()
            {
                yield return UserName;
                yield return Tel;
                yield return Address;
            }
        }
    
    
    
        public class OrderItemCountChangedEvent
        {
    
            public Guid OrderId { get; private set; }
    
            public Guid OrderItemId { get; private set; }
    
            public int OldCount { get; private set; }
            public int NewCount { get; private set; }
    
            public OrderItemCountChangedEvent(Guid orderId, Guid orderItemId, int oldCount, int newCount)
            {
                OrderId = orderId;
                OrderItemId = orderItemId;
                OldCount = oldCount;
                NewCount = newCount;
            }
        }
    
    
  • 相关阅读:
    关于springMVC+Mybatis jar包详解
    关于struts2的过滤器和mybatis的插件的分析
    C# Zip压缩、解压
    JS 字符串转字节截取
    JS 时间差计算 XX秒前、XX小时前、XX天前
    IIS配置web.config 将带www域名转为不带www域名
    JavaScript获取当前url路径
    SQL 查询今天、昨天、7天内、30天的数据
    SQL求解两个时间差
    SqlServer获取当前日期
  • 原文地址:https://www.cnblogs.com/caiyangcc/p/13089751.html
Copyright © 2020-2023  润新知