淳安县 溆浦县 辽中县 顺平县 昌宁县 青浦区 苍山县 祁门县 黄山市 佛坪县 湟中县 湖口县 葫芦岛市 通山县 龙陵县 塘沽区

桃花岛_DDD实战进阶第一波(十二):开发一般业务的大健康行业直销系统(订单上下文POCO模型)

标签:羊排 扎金花真欢乐骗子网站

在本系列前面的文章中,我们主要讨论了产品上下文与经销商上下文相关的实现,大家对DDD的方法与架构已经有了初步的了解。

但是在这两个界限上下文中,业务逻辑很简单,也没有用到更多的值对象的内容。从这篇文章开始,我们来讲讲订单界限上下文实现的内容,

里面的业务逻辑相对复杂一些,而且有大量值对象的引入来进行逻辑的处理。

订单上下文的需求主要是生成相应的订单项,每个订单项中有相关的订单产品和购买数量并生成订单项总额、订单项总PV,同时订单项总额

和订单项总PV会累加到订单总额和订单总PV中,同时会根据订单总额扣减当前经销商的电子币,也会根据购买产品的PV,累加当前经销商的PV值。

1.订单界限上下文的领域模型:

从上图的领域模型中,大家可以看出订单是聚合根,订单明细是聚合的实体;订单聚合根总有总价、总PV、收获地址三个值对象,订单明细实体有

明细总价、明天国的阶梯_2018年最新新闻网细总PV、产品信息三个值对象。

2.明细总价值对象:

    public partial class OrderItemTotalPrice
    {
        public decimal SubTotalPrice { get; set; }
    }

3.明细总PV值对象:

 public partial class OrderItemTotalPV
    {
        public decimal SubTotalPV { get; set; }
    }

4.产品信息值对象:

 public partial class ProductSKUs
    {
        public string ProductSPUName { get; set; }
        public decimal ProductPrice { get; set; }
        public decimal ProductPV { get; set; }
        public Guid ProductSKUId { get; set; }
    }

5.订单明细实体:

 public partial class OrderItem : IEntity
    {
        public string Code { get; set; }
        [Key]
        public Guid Id { get ; set ; }

        public OrderItemTotalPrice OrderItemTotalPrice { get; set; }
        public OrderItemTotalPV OrderItemTotalPV { get; set; }
        public ProductSKUs ProductSKUs { get; set; }

        public int Count { get; set; }

    }

订单明细实体引入了OrderItemTotalPrice、OrderItemTotalPV、ProductSKUs三个值对象,同时具有自己的Code与Count两个属性。

6.订单总价对象:

 public partial class OrderTotalPrice
    {
        public decimal TotalPrice { get; set; }
    }

7.订单总PV值对象:

 public partial class OrderTotalPV
    {
        publ春妮的周末时光_2018年最新新闻网ic decimal TotalPV { get; set; }
    }

8.订单收货地址值对象:

 public partial class OrderStreet
    {
       //
        public string Privince { get; set; }
       //
        public string City { get; set; }
       //区(县)
        public string Zero { get; set; }
       //街道地址
        public string Street { get; set; }
    }

9.订单聚合根:

 public partial class Orders : IAggregation仙侠世界_2018年最新新闻网Root
    {
        public string Code { get; set ; }
        [Key]
        public Guid Id { get ;重生之大涅磐_2018年最新新闻网 set; }

        public OrderStreet OrderStreet { get; set; }
        public OrderTotalPV OrderTotalPV { get; set; }
        public OrderTotalPrice OrderTotalPrice { get; set; }
        public DateTime OrderDateTime { get; set; }
        public Guid OrderDealerId { get; set; }
        public List<OrderItem> OrderItems { get; set; }
        public string Telephone { get; set; }
    }

订单聚合根引入了OrderStreet、OrderTotalPV、OrderTotalPrice三个值对象;Code、DateTime(下单时间)、Telephone(联系电话)、OrderItems(订单项实体集)等几个属性。

10.生成数据库表:

根据前面文章的说明,我们可以依据上述POCO模型生成对应的数据库表,要注意的是,OrderItems可以自动识别为Orders的关联表,其他几个值对象我们要考虑是否是生成

单独的表还是作为相关实体或聚合根的表的列存在,一般情况下,我们是将这些值对象作为相关聚合根或实体表的列存在的。EF Core无法自动处理这些值对象如何存储到数据库中,

我们需要手工指定:

 public class OrderEFCoreContext:DbContext,IOrderContext
    {
        public DbSet<Orders> Order { get; set; }
        public DbSet<OrderItem> OrderItem { get; set; }
        protected override void OnConfiguring(DbContextOptionsBuilder optionBuilder)
        {           

            optionBuilder.UseSqlServer("数据库连接字符串");
           
        }
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Orders>().OwnsOne(p => p.OrderStreet);
            modelBuilder.Entity<Orders>().OwnsOne(p => p.OrderTotalPrice);
            modelBuilder.Entity<Orders>().OwnsOne(p => p.OrderTotalPV);

            modelBuilder.Entity<OrderItem>().OwnsOne(p => p.OrderItemTotalPrice);
            modelBuilder.Entity<Ord娇兰_2018年最新新闻网erItem>().OwnsOne(p => p.OrderItemTotalPV);
            modelBuilder.Entity<OrderItem>().OwnsOne(p => p.ProductSKUs);
        }

从上面代码可哈尔滨工业大学_2018年最新新闻网以看出,在OnModelCreating时,可以指定6个值对象包含在对应的聚合根和实体相关的表中。

QQ讨论群:309287205

DDD实战进阶视频请关注微信公众号:

当前文章:http://51q8e-zhenduizhi-com.suibest.cn/vc3k7x3/47cd9_155008.html

发布时间:2019-09-19 03:57:07

澳门银河官网真人娱乐  银河国际手机网址2949  银河娱乐手机官网  银河娱乐手机版yh163am.com  银河娱乐首页yh163am.com赵又廷蜡像入驻上海杜莎夫人蜡像馆  澳门银河娱乐官网下载  中兴提交关于暂停执行拒绝令的申请  银河娱乐是正规网站吗  银河娱乐在线官方网址  银河国际手机网址2949  

用手机访问
下载APP
appicon 下载
扫一扫,手机浏览
code
休闲娱乐
综合热点资讯
单机游戏下载

精彩专栏
游民星空联运游戏