阿里技术专家详解ddd系列-domainprimitive(代码片段)

淘系技术 淘系技术     2022-11-28     358

关键词:


Long userId;
String name;
String phone;
String address;
Long repId;




SalesRepRepository salesRepRepo;
UserRepository userRepo;

User
ValidationException
(name == || name.length() == ValidationException(
(phone == || !isValidPhoneNumber(phone))
ValidationException(
String areaCode = String[] areas = String[] (i = String prefix = phone.substring( (Arrays.asList(areas).contains(prefix))
areaCode = prefix;


SalesRep rep = salesRepRepo.findRep(areaCode);

User user = User();
user.name = name;
user.phone = phone;
user.address = address;
(rep != user.repId = rep.repId;


userRepo.save(user);



String pattern = phone.matches(pattern);

(phone == || !isValidPhoneNumber(phone))
ValidationException((phone == || !isValidPhoneNumber(phone) || !isValidCellNumber(phone))
ValidationException((phone == ValidationException((!isValidPhoneNumber(phone))
ValidationException( @NotNull @NotBlank String name,
@NotNull @Pattern(regexp = String phone,
@NotNull String address
)
;

User
ValidationUtils.validateName(name); ValidationUtils.validatePhone(phone);
ValidationUtils.validateAddress(address);
...

String[](i = String prefix = phone.substring( (Arrays.asList(areas).contains(prefix))
areaCode = prefix;


SalesRep rep = salesRepRepo.findRep(areaCode);

String
(i = String prefix = phone.substring( (isAreaCode(prefix))
prefix;



String[] areas = String[] Arrays.asList(areas).contains(prefix);



String number;
String
number;



(number == ValidationException( (isValid(number))
ValidationException(


String
(i = String prefix = number.substring( (isAreaCode(prefix))
prefix;





String[] areas = String[] Arrays.asList(areas).contains(prefix);



String pattern = number.matches(pattern);


这两个概念加起来,构造成了本文标题的Domain Primitive(DP)。


UserId userId;
Name name;
PhoneNumber phone;
Address address;
RepId repId;


User @NotNull Name name,
@NotNull PhoneNumber phone,
@NotNull Address address
)

SalesRep rep = salesRepRepo.findRep(phone.getAreaCode());

User user = User();
user.name = name;
user.phone = phone;
user.address = address;
(rep != user.repId = rep.repId;


userRepo.saveUser(user);

User Name(Address(PhoneNumber(User @NotNull Name name,
@NotNull PhoneNumber phone,
@NotNull Address address
)
userRepo.save(user);



BankService.transfer(money,
BigDecimal amount;
Currency currency;



BankService.transfer(money, recipientId);



(money.getCurrency().equals(targetCurrency))
BankService.transfer(money, recipientId);

BigDecimal rate = ExchangeService.getRate(money.getCurrency(), targetCurrency);
BigDecimal targetAmount = money.getAmount().multiply(BigDecimal(rate));
Money targetMoney = Money(targetAmount, targetCurrency);
BankService.transfer(targetMoney, recipientId);


BigDecimal rate;
Currency from;
Currency to;




Money
notNull(fromMoney);
isTrue( BigDecimal targetAmount = fromMoney.getAmount().multiply(rate);
Money(targetAmount, to);



ExchangeRate rate = ExchangeService.getRate(money.getCurrency(), targetCurrency);
Money targetMoney = rate.exchange(money);
BankService.transfer(targetMoney, recipientId);


4

User ValidationException
(name == || name.length() == ValidationException(
(phone == || !isValidPhoneNumber(phone))
ValidationException(

String areaCode = String[] areas = String[] (i = String prefix = phone.substring( (Arrays.asList(areas).contains(prefix))
areaCode = prefix;


SalesRep rep = salesRepRepo.findRep(areaCode);
User ValidationException

Name _name = Name(name);
PhoneNumber _phone = PhoneNumber(phone);
Address _address = Address(address);

SalesRep rep = salesRepRepo.findRep(_phone.getAreaCode());
User
SalesRep rep = salesRepRepo.findRep(phone.getAreaCode());

Name(PhoneNumber(Address("浙江省杭州市余杭区文三西路969号"));

通过以上 4 步,就能让你的代码变得更加简洁、优雅、健壮、安全。你还在等什么?今天就去尝试吧!


链接:

①  https://martinfowler.com/bliki/AnemicDomainModel.html 


END


你可能还喜欢

点击下方图片即可阅读


大促背后的流量利器|手淘push升级 比你更懂你


阿里工程师谈,什么是好的代码?


“一次编码、到处运行”,淘宝云端一体化探索


阿里技术专家详解ddd系列第三讲-repository模式(代码片段)

为什么要用Repository实体模型vs.贫血模型Entity(实体)这个词在计算机领域的最初应用可能是来自于PeterChen在1976年的“TheEntity-RelationshipModel-TowardaUnifiedViewofData"(ER模型),用来描述实体之间的关系,而ER... 查看详情

阿里技术专家详解ddd系列第二弹-应用架构(代码片段)

前言架构这个词源于英文里的“Architecture“,源头是土木工程里的“建筑”和“结构”,而架构里的”架“同时又包含了”架子“(scaffolding)的含义,意指能快速搭建起来的固定结构。而今天的应用架构࿰... 查看详情

阿里技术专家详解ddd系列-domainprimitive(代码片段)

  导读:对于一个架构师来说,在软件开发中如何降低系统复杂度是一个永恒的挑战,无论是94年GoF的DesignPatterns,99年的MartinFowler的Refactoring,02年的PofEAA,还是03年的EnterpriseIntegrationPatterns,都是通... 查看详情

阿里技术专家详解ddd系列第三讲-repository模式(代码片段)

为什么要用Repository实体模型vs.贫血模型Entity(实体)这个词在计算机领域的最初应用可能是来自于PeterChen在1976年的“TheEntity-RelationshipModel-TowardaUnifiedViewofData"(ER模型),用来描述实体之间的关系,而ER... 查看详情

阿里技术专家详解ddd系列第二弹-应用架构(代码片段)

前言架构这个词源于英文里的“Architecture“,源头是土木工程里的“建筑”和“结构”,而架构里的”架“同时又包含了”架子“(scaffolding)的含义,意指能快速搭建起来的固定结构。而今天的应用架构࿰... 查看详情

阿里高级技术专家谈:ddd在互联网业务开发中的实践

我一直记得之前一技术老哥告诉我的一句话:编程不是青春饭,技术才是硬道理。想要更好的把握时代,掌控自己的职场沉浮,更要基于此了解这个时代的趋势是什么!我经常“穿梭”在程序员的各大交流群... 查看详情

前沿分享|阿里云数据库高级技术专家宋利兵:阿里云企业级自治数据库rds详解

...2021云栖大会-企业级云原生数据库最佳实践论坛中,阿里云数据库高级技术专家宋利兵关于“阿里云企业级自治数据库RDS详解”的分享。本文将从2方面为大家介绍企业级的自治的数据库系统。RDSMySQL 产品RDSMySQL 自研内核一... 查看详情

ddd领域驱动设计如何进行工程化落地

...x1f4e3;📣📣🎍大家好,我是慕枫🎍前阿里巴巴高级工程师,InfoQ签约作者、阿里云专家博主,一直致力于用大白话讲解技术知识🎍在这里和大家分享一线互联网大厂面试经验、技术人成长路线以及... 查看详情

ddd领域驱动设计如何进行工程化落地

...x1f4e3;📣📣🎍大家好,我是慕枫🎍前阿里巴巴高级工程师,InfoQ签约作者、阿里云专家博主,一直致力于用大白话讲解技术知识🎍在这里和大家分享一线互联网大厂面试经验、技术人成长路线以及... 查看详情

注意力机制详解系列:空间注意力机制

...数据专业硕士在读,CSDN人工智能领域博客专家,阿里云专家博主,专注大数据与人工智能知识分享。🎉专栏推荐:目前在写CV方向专栏,更新不限于目标检测、OCR、图像分类、图像分割等方向,目前活... 查看详情

注意力机制详解系列:通道注意力机制(代码片段)

...数据专业硕士在读,CSDN人工智能领域博客专家,阿里云专家博主,专注大数据与人工智能知识分享。🎉专栏推荐:目前在写CV方向专栏,更新不限于目标检测、OCR、图像分类、图像分割等方向,目前活... 查看详情

阿里一面:谈一下你对ddd的理解?2w字,帮你实现ddd自由(代码片段)

...个非常、非常高频的交流话题。最近,有小伙伴面试阿里时,遇到一个面试题:谈谈你对DDD的理解?小伙伴没有用过DDD,一点概念都没有。当然,面试也就挂了。这里尼恩给大家做一下系统化、体系化的DDD... 查看详情

聊聊技术专家谈阿里云史诗级故障

...来不是弹,有本事技术专家谈谈自己呗。风言风语  阿里云出现史诗级故障,处理的时间足够长&# 查看详情

阿里云容器技术专家莫源:乘风踏雪归来,仍是此间少年

摘要:我叫刘中巍,花名莫源,是阿里云容器服务团队的技术专家,13年加入阿里云,从零开始参与多款云产品的研发。在1024开发者节之际,来分享下自己的成长故事。“平凡但不安分”的男孩我是一个来自北方的孩子,从小到... 查看详情

游戏中水的渲染技术系列一

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。CSDN视... 查看详情

cola4.0应用架构和ddd经典项目实践:货物运输系统

...hitecture的缩写,代表“整洁面向对象分层架构”,是来自阿里技术专家的开源项目。目前COLA已经发展到COLA4.0。COLA既是框架,也是架构。COLA架构融合了常见的DDD代码模型,可以帮助开发人员快速实践并落地DDD领域建模的应用项... 查看详情

注意力机制详解系列:注意力机制概述

...数据专业硕士在读,CSDN人工智能领域博客专家,阿里云专家博主,专注大数据与人工智能知识分享。🎉专栏推荐:目前在写CV方向专栏,更新不限于目标检测、OCR、图像分类、图像分割等方向,目前活... 查看详情

云原生存储详解:容器存储与k8s存储卷(代码片段)

作者|阚俊宝阿里云技术专家导读:云原生存储详解系列文章将从云原生存储服务的概念、特点、需求、原理、使用及案例等方面,和大家一起探讨云原生存储技术新的机遇与挑战。本文为该系列文章的第二篇,会对容器存储的... 查看详情