DDD领域驱动之干货 (一)

说道DDD不得不说传统的架构与DDD的架构区别。

传统的架构不外乎就是三层,而在这三层里面又不断的细分,始终没有达到想要的效果,那么为什么当时还是采用三层。

当然在DDD没有提出的时候三层是大多数人的选择。

那么当领域驱动被提出来的时候它又能带给我们什么样的好处??

 近期博主看了一下dax.net大佬有关DDD的文章,这里提出自己的一些心得,本着共同学习的精神一起进步。


  我也来说说领域模型

1.为什么叫领域模型?

  首先传统的模型(这里指的只具备getter 和 setter)不包含其他业务逻辑泛指没有具体的功能这种模型我们称为失血(贫血)模式。

  然后才是具备有业务的模型除了getter 和setter 外还有其他的业务逻辑包含在里面,比如说我有一个购物车,购物车内有5件商品,每件商品价值20元,那么在销售订单的时候可以这样写总价=5*20。当然这个例子有点牵强,意会意会就行了。

2.下面我们看看代码是如何设计。

  首先我们有个user、address、saleorder、salelines、Categorization、Category、Product、userrole、ShoppingCart、ShoppingCartItem几个类

    如下图。

           

    其中声明IEntity领域实体接口、IAggregateRoot聚合根集合、AggregateRoot聚合根接口的抽象类。

    

    这里不得不提到聚合个概览。

    引用一下图片:

    

      生成的数据库模型如下图:

    

相关文章: 

  •   WeText项目:一个基于.NET实现的DDD、CQRS与微服务架构的演示案例

  • 【DDD/CQRS/微服务架构案例】在Ubuntu 14.04.4 LTS中运行WeText项目的服务端

原文地址:http://www.cnblogs.com/edna-lzh/p/6869416.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/325306.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《四世同堂》金句摘抄(十一)

System.out.println("这两天还是读的《四世同堂》"); System.out.println("这本书好长啊"); System.out.println("不断的听,不断的看,才到1000多页"); System.out.println("这几天没有好好的读,追求了速度…

今日头条大佬十年面试了 2000 人,总结了这 5 点

转载自 今日头条大佬十年面试了 2000 人,总结了这 5 点 文章整理自今日头条张一鸣在“2016今日头条Bootcamp”上对研发&产品部门应届毕业生的寄语。 大家好! 各位都非常年轻,我今天来的时候挺有压力。因为我毕业快11年了,…

第十三章 常用类(Math 类、Arrays 类、System类、Biglnteger 和BigDecimal 类、日期类)

一、Math 类(P481) Math 类包含,用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。 (1)abs:绝对值 (2)pow:求幂 (3)c…

栈队列

//栈 //public class Stack extends Vector 已经过时 Stack stack new Stack(); //双端队列 可以作为栈来使用 push() 入栈 pop() 出栈 peek() 获取栈顶元素 Deque deque ; //ArrayDeque 底层是数组 LinkedList 底层是链表 //队列 Queue queue; //ArrayDeque 底层是数组 Link…

实体类为什么要用包装类而不用基本类型

eg 基本类型默认为有值的 用包装类不传值得是否默认为空 mybatisplus进行操作时更容易进行是否非空的判断

Asp.Net Core轻量级Aop解决方案:AspectCore

什么是AspectCore Project ? AspectCore Project 是适用于Asp.Net Core 平台的轻量级 Aop(Aspect-oriented programming) 解决方案,它更好的遵循Asp.Net Core的模块化开发理念,使用AspectCore可以更容易构建低耦合、易扩展的Web应用程序。AspectCore使…

指定查找区间,查找学生姓名并显示是否修改成功

首先需要创建两个类(面向对象OO的方式实现): 一个是Student,该类主要的代码: String [] names new String [5]; //指定位置查找学生信息public boolean select(int start,int end,String name){boolean flag false;…

去 BAT 面试,总结了这 55 道 MySQL 面试题

转载自 去 BAT 面试,总结了这 55 道 MySQL 面试题 1、一张表,里面有ID自增主键,当insert了17条记录之后,删除了第15,16,17条记录,再把Mysql重启,再insert一条记录,这条记录的ID是18还是15 &am…

arrylist和linked list区别

/** 1.不变的是什么1.运行结果没有2.代码没有变化2.变化的是什么1.底层的存储结构发生了变化ArrayList:数组LinkedList:双向链表2.功能的底层实现变了add(2,67)ArrayList:需要大量的后移元素 效率低LinkedList:修改前后节点的指针…

《四世同堂》金句摘抄(十二)

System.out.println("继续看《四世同堂》"); System.out.println("这本书好长啊"); System.out.println("不断的听,不断的看,才到1000多页"); System.out.println("这几天没有好好的读,追求了速度&#x…

使用DotNetty编写跨平台网络通信程序

长久以来,.Net开发人员都非常羡慕Java有Netty这样,高效,稳定又易用的网络通信基础框架。终于微软的Azure团队,使用C#实现的Netty的版本发布。不但使用了C#和.Net平台的技术特点,并且保留了Netty原来绝大部分的编程接口。让我们在使…

Mybatisplus查找数据库中表的策略和id自增策略

默认根据类名向数据库中查找对应的表的名字 加注解自己指定

Redis 再牛逼,也得设置密码

转载自 Redis 再牛逼,也得设置密码 Redis 你再牛逼也得设置密码啊,不然会有安全漏洞,造成一些隐患。 还有,比如像出现下面这样的错,需要设置密码,或者关闭保护模式,所以还是设置密码比较安全…

java中实现客户姓名添加和显示

java中使用带参的方法实现对学生姓名的添加和显示: 首先我们创建一个名为Student类的学生类,由于需要添加多个学生信息,那么我们就先在Student类中声明一个存放学生姓名的数组: String [] names new String[10];然后就是添加学生…

ArrayList基操

//1.创建一个ArrayList对象,用来存储多个分数 ArrayList list new ArrayList(); //2.向ArrayList添加分数 list.add(67); //向末尾添加 list.add(89); // 集合的元素必须是对象类型,不能是基本数据类型。 list.add(78);//如果要放入基本数据类型&#…

C#码农的大数据之路 - 使用C#编写MR作业

写在前面 从Hadoop出现至今,大数据几乎就是Java平台专属一般。虽然Hadoop或Spark也提供了接口可以与其他语言一起使用,但作为基于JVM运行的框架,Java系语言有着天生优势。而且能找到的与大数据框架如Hadoop等使用介绍的文章也都以Java语言作…

一文搞定 Spring Data Redis 详解及实战

转载自 一文搞定 Spring Data Redis 详解及实战 SDR - Spring Data Redis的简称。 Spring Data Redis提供了从Spring应用程序轻松配置和访问Redis的功能。它提供了与商店互动的低级别和高级别抽象,使用户免受基础设施问题的困扰。 Spring Boot 实战 引用依赖 …

《四世同堂》金句摘抄(十三)

System.out.println("继续看《四世同堂》"); System.out.println("这本书好长啊"); System.out.println("不断的听,不断的看,才到1000多页"); System.out.println("这几天没有好好的读,追求了速度&#x…

StringBuilder的使用

package com.bjsxt.builder; /** StringBuilder的使用 最常用的操作 StringBuilder builder new StringBuilder(“中华人民共和国”);// String—>StringBuilder builder.append(“北京市”); String str builder.toString(); //StringBuilder—>String 使用场合…