(DDD)领域驱动设计——认识领域驱动
发布日期:2021-06-30 17:36:33
浏览次数:3
分类:技术文章
本文共 1777 字,大约阅读时间需要 5 分钟。
文章目录
什么是领域Domain?
理解DDD,首先要理解领域。
通俗的说,领域就是业务;就是合格的产品经理的需求文档所表达的内容;狭义的说就是你的Business Layer里所有的代码以及产生的影响等等;
严谨的定义是:
一个有边界的业务面,其中包含业务概念,业务行为,业务影响。计算机程序应用于这个业务面,并使得程序具有实际的商业价值,赋予程序实际意义。
域中可以再划分为子域,并且域与域之间一般存在联系。不做展开,后文详述。如下,就是一个无人机交付系统的领域草稿:
DDD 的价值
- DDD 使领域专家与开发人员成为密不可分的团体。
领域专家:精通业务的任何人,不局限于岗位。
领域专家与开发人员通过一套适用于当前领域建模的“通用语言”进行交流沟通,并且持续更新这套语言。“通用语言”是对软件模型的直接反映。
- DDD 关注业务战略 DDD的战略设计在于明确地界限,区分不同系统与业务关注点。这样可以保护每个业务层面的服务,是实现SOA或微服务架构的有力保障。
- DDD 是领域建模的工具 这些战术上的工具保障了开发人员能够按照领域专家的思维模型设计开发软件,也回归了面向对象的思想。并且保障开发出的软件是可测试的、良好伸缩性、健壮性、并且允许分布式。
总而言之,DDD不是一种技术,也不局限与一种开发语言。他是一种指导思想(战略),并提供具体的工具(战术)。从立项到持续交付之间的漫长时间中,保障项目的团队高效,软件易扩展、健壮、稳定。
接下来,我们通过一个常见的不合理设计示例体会DDD思想。
贫血领域对象
@Transactionalpublic void saveCustomer( String customerId, String customerFirstName, String customerLastName, String streetAddress1, String streetAddress2, String city, String stateOrProvince, String postalCode, String country, String homePhone, String mobilePhone, String primaryEmailAddress, String secondaryEmailAddress) { Customer customer = customerDao.readCustomer(customerId); if (customer == null) { customer = new Customer(); customer.setCustomerId(customerId); } customer.setCustomerFirstName(customerFirstName); customer.setCustomerLastName(customerLastName); customer.setStreetAddress1(streetAddress1); customer.setStreetAddress2(streetAddress2); customer.setCity(city); customer.setStateOrProvince(stateOrProvince); customer.setPostalCode(postalCode); customer.setCountry(country); customer.setHomePhone(homePhone); customer.setMobilePhone(mobilePhone); customer.setPrimaryEmailAddress(primaryEmailAddress); customer.setSecondaryEmailAddress (secondaryEmailAddress); customerDao.saveCustomer(customer);}
理解领域、子域、界限上下文
领域从广义上来讲,通常包含了过多的信息,可能一个公司所有的业务都可以用某某领域概括。但是对于开发,我们需要把这个领域拆分为多个子域,并且子域之间存在明确的界限。
待续。。。。
转载地址:https://lemon.blog.csdn.net/article/details/83717412 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月25日 06时17分42秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
ROS(七)——话题消息的定义与使用
2019-04-30
yolov3入门实战
2019-04-30
B树 & B+树
2019-04-30
Node-Red(一)——简介与安装
2019-04-30
representation learning 表示学习/表征学习
2019-04-30
Haar特征
2019-04-30
Python 之 histogram直方图
2019-04-30
Python 之 Scatter散点图
2019-04-30
Python实现决策树 Desision Tree & 可视化
2019-04-30
决策树 Decision tree
2019-04-30
nominal和ordinal & 数据处理中四种基本数据类型
2019-04-30
Python 实现 Cross-validation
2019-04-30
Grid SearchCV(网格搜索)& Python实现
2019-04-30
ROS相关知识
2019-04-30
单目深度估计 monodepth2模型 代码
2019-04-30