初识DDD(领域驱动设计)

  • 前言
  • 01 基础概念
    • 什么是DDD
  • 02 DP(Domain Primitive)
    • 案例一(用户登录)
    • DP的引出
  • 03 计划

前言

今天开始,更新领域驱动设计系统架构落地,由于白天要上班, 更新会有点慢。

01 基础概念

什么是DDD

从pop(面向过程),oop(面向对象),到最后的ddd(领域),改变的都是我们的编程思维,好的架构,不仅减轻了我们程序员的工作量,也提升了代码的可读性,减轻了维护的工作量,

02 DP(Domain Primitive)

初看DP,很难理解它是什么,
我个人认为它是一个基础的值对象,就像Integer、String类型一样,(个人理解,大神勿喷)
DP是模型,方法,架构的技术,在代码中无处不在

案例一(用户登录)

      public User Login(string userName,string passWord){if (userName == null|| userName =="") {throw new Exception("账号不能为空");}if (passWord == null || passWord == ""){throw new Exception("密码不能为空");}if (userName.Length < 6){throw new Exception("账号过短");}passWord = DESHelper.Encrypt(passWord);//密码加密/** 等等校验逻辑*/return userRepository.GetUser(userName, passWord);}

这样是不是我们日常写的代码,登录一个方法里面,实际业务逻辑和校验逻辑混合在一起,很难看出实际业务逻辑是什么

数据验证代码不能复用,在登录的时候需要写一遍,在添加的时候是不是也要写一遍,在修改的时候是不是也要写一遍,如果说可以把这些代码封装一下,你觉得怎么封装好

DP的引出

这个时候,如果对象的字段可能会有自己的校验或者业务逻辑,我们初始反应可能就是写个帮助类,或者静态类,但是今天引入新的思想,使用值对象,

  public class User : AggregateRoot{public string Name { get; set; }//用户名public UserName UserName { get; set; }//账号public ProjectId ProjectId { get; set; }//项目idpublic Image Img { get; set; }//图片public PassWord PassWord { get; set; }//密码public string Company { get; set; }//公司}

上面是用户对象,里面用户账号有自己的业务逻辑,
密码也有自己的逻辑,将密码创建对象如下,

public class PassWord{public string Pwd { get; set; }public PassWord(){}public PassWord(string pwd){if (pwd == null){throw new ValidationException("密码不能为空");}//else if (pwd.Length < 6)//{//    throw new ValidationException("密码长度应大于六");//}else{Pwd = DESHelper.Encrypt(pwd);}}}

重写构造函数,里面写校验逻辑及密码加密

        public User Login(string userName, PassWord passWord){try{CjsiteUser user = context.Set<CjsiteUser>().Where(u => u.UserName == userName && u.PassWord == passWord.Pwd).Include(q => q.Project).Include(q => q.UserRoles).FirstOrDefault();if (user == null){throw new Exception("用户名或密码错误");}return autoMapperRepository.MapTo<CjsiteUser, User>(user);}catch (Exception ex){throw new Exception(ex.Message);}}

在接口处传密码对象,实际业务代码不会带有任何校验逻辑,一个简单的封装对象,会对代码的整洁度有很大的提升,

03 计划

下篇写领域层实体对象的创建

(一)初识DDD(领域驱动设计)相关推荐

  1. DDD领域驱动设计之聚合、实体、值对象

    关于具体需求,请看前面的博文:DDD领域驱动设计实践篇之如何提取模型,下面是具体的实体.聚合.值对象的代码,不想多说什么是实体.聚合等概念,相信理论的东西大家已经知晓了.本人对DDD表示好奇,没有在真 ...

  2. DDD领域驱动设计 — 贫血模型与充血模型

    文章转载来源:https://juejin.cn/post/6917125801460629518 | 前言  要想深入掌握和了解 DDD 领域驱动设计的核心,那无论如何也绕不开两大较为抽象的概念-- ...

  3. DDD 领域驱动设计:贫血模型、充血模型的深入解读!

    作者:JavaEdge在掘金 链接:https://juejin.cn/post/6917125801460629518 -     前言     - 要想深入掌握和了解 DDD 领域驱动设计的核心, ...

  4. 浅谈我对DDD领域驱动设计的理解

    从遇到问题开始 当人们要做一个软件系统时,一般总是因为遇到了什么问题,然后希望通过一个软件系统来解决. 比如,我是一家企业,然后我觉得我现在线下销售自己的产品还不够,我希望能够在线上也能销售自己的产品 ...

  5. C#进阶系列——DDD领域驱动设计初探(五):AutoMapper使用

    前言:前篇搭建了下WCF的代码,就提到了DTO的概念,对于为什么要有这么一个DTO的对象,上章可能对于这点不太详尽,在此不厌其烦再来提提它的作用: 从安全上面考虑,领域Model都带有领域业务,让Cl ...

  6. DDD 领域驱动设计:贫血模型、充血模型的深入解读

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 后台回复"k8s",可领取k8s资料 -     前言 ...

  7. [转]浅析DDD(领域驱动设计)

    最近在做一些微服务相关的设计,内容包括服务的划分,Restful API的设计等.其中比较棘手的就是Service的职责划分:如何抽象具有统一业务范畴的Model,使其模块化,又如何高度提炼并组合多模 ...

  8. 浅析DDD(领域驱动设计)

    最近在做一些微服务相关的设计,内容包括服务的划分,Restful API的设计等.其中比较棘手的就是Service的职责划分:如何抽象具有统一业务范畴的Model,使其模块化,又如何高度提炼并组合多模 ...

  9. DDD 领域驱动设计落地实践:六步拆解 DDD

    引言 相信通过前面几篇文章的介绍,大家对于 DDD 的相关理论以及实践的套路有了一定的理解,但是理解 DDD 理论和实践手段是一回事,能不能把这些理论知识实际应用到我们实际工作中又是另外一回事,因此本 ...

最新文章

  1. vue data数据修改_史上最强vue总结,万字长文
  2. [PHP] 现代化PHP之路:composer的安装和升级
  3. c语言数组方式实现静态循环队列
  4. Unity 2017 Game Optimization 读书笔记(4)Scripting Strategies Part 4
  5. git提交代码时报错:nothing added to commit but untracked files present
  6. 解决:VScode 汉化后 、设置中文后 还显示英文的问题
  7. 微軟专为Visual Studio 2019设计出一套容器工具擴充套件
  8. 海量数据(数据量比较大时)的处理分析
  9. 目标检测——SSD的学习笔记
  10. 计算基因组学工具解析肿瘤与免疫细胞的互作--转载
  11. React Native填坑之旅--动画
  12. 在校大学生如何规划自己的程序员之路
  13. 微信小程序 地图实现查找标记地点
  14. 进阶无人驾驶—百度Apollo高精度地图
  15. 《21个项目玩转深度学习》第四章问题总结--Python3.6与2.7的兼容问题及其他小问题
  16. 蓝韵DR采集工作站LINUX系统,蓝韵PACS系统的技术参数
  17. java的jdk安装教程附百度网盘链接环境配置遇到的各种问题版本选择
  18. JAVA实现PDF无损转WORD
  19. html怎么修改表格行列间距,html表格如何设置间距
  20. 用1元5角钱人名币兑换5分、2分和1分的硬币(每一种都要有)共一百枚,问共有几种兑换方案?并输出每种方案。

热门文章

  1. 《OpenSSL3.0编程之二 官方示例-digest》
  2. 165 pbi-utils 使用文档
  3. PBI培训(4):批量爬取web来源公开数据
  4. 动态 | 腾讯首投国内AI芯片公司,成立仅5个月专注数据中心深度学习芯片
  5. 怎么在python官网下载python,官网python怎么下载安装
  6. 【干货】交换机的接口类型完全实物了解
  7. python中的幂函数,指数函数问题
  8. 互联网卡和正常卡有什么区别
  9. sap crm行业解决方案_2019年,CRM客户关系管理软件排名比较
  10. linux与windows双系统启动引导