宁海建设局网站,网站有死链怎么处理,公司简介内容,深圳市门户网站建设哪家好最后更新于2023年3月10日 14:28:08
问题建模》软件分层》具体结构#xff0c;是层层递进的关系。有了问题建模#xff0c;才能进行具体的软件分层的讨论#xff0c;再有了分层#xff0c;才能讨论在domain里面应该怎么实现具体结构。
1、问题建模#xff1a;Domain、Mod…最后更新于2023年3月10日 14:28:08
问题建模》软件分层》具体结构是层层递进的关系。有了问题建模才能进行具体的软件分层的讨论再有了分层才能讨论在domain里面应该怎么实现具体结构。
1、问题建模Domain、Model、Domain Model 怎么获得精确的领域建模通用语言、程序员和业务专家的好的沟通。
领域驱动设计中的领域模型是什么 这里面说的挺对的领域模型是处理问题的条理化和结构化的知识而领域本身就是问题/就是需要解决的业务。对甲方的需求的分析甲方公司的需求、业务、规则、流程等组成了domain。 先有了领域模型这个东西再将领域模型转化为具体的代码而代码的转化就要分什么用户界面/展现层、应用层、领域层、基础设施层再往下才是具体的设计什么实体、值对象之类的。
2、限界上下文
看起来它是对前一小节完成的领域建模的一个划分。
3、软件分层User Interface、Application、Domain、Infrastructure关注点分离构造四个概念层
DDD 架構 分層式架構與依賴反向原則 这个博主讲话真的有够机车的喔他这个也是稍稍深了一点。 DDD架构的重心是围绕Domain层进行构建的 6. Domain-Driven Design - Layered Architecture 这个挺好的比较浅。这哥们儿在infrastructure那写的很烂看得出来是懒得写下去了。写麻了是吧 点开他的个人资料有一系列文章应该都不错。 User Interface
这一层可能是指前端但是在一些没有前端的程序中客户指的是外部的其它系统于是也可以理解为暴露给外部使用的一些API。 这一层还有传统意义上的controller层的功能即将传入的request转化为应用程序层的方法调用。 “负责为每个服务调用启动事务”是什么勾巴意思这里应该跟事务脚本模式有关。 Application
几个栗子先下面这是一个Application层的函数从上面的文章里头扒的
public void cancelOrder(String username, Long orderId) {// Check authorization on accountOrder order brokerageAccountRepository.findOrder(orderId);checkAccountAuthorization(getUser(username),order.getAccount().getId(),BrokerageAccountPermission.Trade);// Cancel orderorder.pendingCancel(orderEventPublisher);exchangeTradingService.cancelOrder(order);
}这个函数做的事情输入username和orderId两个值对象从brokerageAccountRepository这个infrastructure层的对象里identify到唯一的orderDomain》检查账户的认证状态这个我也不好说调用了很多东西很乱……》调用orderDomain来取消订单》从exchangeTradingService里面取消订单这个不讨论。 根据上面这个函数总结两点1、该应用层的函数通过一个值对象到infra层去检索一个聚合。2、该应用层的函数还能操作这个检索到的聚合触发一些domain层的事情就像上面提到的 order.pendingCancel(orderEventPublisher) Domain
这是DDD的重中之重这个Domain跟建模时候那个Domain是两码事这个放在第三小节展开了讲。 Infrastructure
4、Domain层
因为Domain层是整个软件设计的核心部分所以展开单独分配一小节来讨论。 实体和聚合的区别
这个写的好Aggregates Entities in Domain-Driven Design 举个例子一个订单purchase orderPO可能包含多个订单项Line items. 比如说结个婚要包含五金、彩礼、车子、房子啥的一个道理。 聚合支持更高程度的概念。line items可以单独用但是没啥意义。而且line items可能粒度太小太麻烦。 这个我觉得说的挺好一个PO是由entity和好多value object组成的一个聚合aggregate。这里面PO这个entity是这个聚合的根。 业务逻辑被绑定在值对象上而非实体上实体更多地用来做identify。 一个聚合可能包含多个实体比如说一个账户聚合可能包含一个账户实体和多个交易实体通过定义事务边界来涵盖一个客户的存款/取款动作。 identify是啥意思
identify是啥意思ChatGPT查了一下差不多就是说不管实体中的值对象怎么变化实体的身份不会变。就好像一个客户包含电子邮箱、资产啥的都会变但是客户就是客户不会变成摩托车或者油轮什么的。 我上面划掉的这句话的理解不太对identify就像一本书的isbn号似的唯一确定一个实体。 实体、值对象、聚合、聚合根
GoogleGroup的一个讨论 实体域内具有重要意义例如客户并且可以随时间变化的唯一对象 值对象域内的不可变对象在其属性例如日期、地址之外没有任何意义 聚合通过根对象相互关联的实体或值对象的集合 聚合根“拥有”聚合并充当聚合内所有修改的网关的实体
What’s the Difference Between an Aggregate and a Bounded Context 这个文章太深了。。。 什么是域逻辑 这个我也没看明白。。。
5、适用于DDD的设计模式等技术 Event Sourcing 事件溯源模式
Event Sourcing Example Explained in plain English 源码收费想给他个大逼斗给我死。 Why Event Sourcing? 这个是有关于一个叫eventuate local的微服务开源框架的这一篇有点儿用剩下都是废话 记录事件用replay事件的方式去重组实体entity。作为消息的载体允许services去订阅这些事件。事件存储是事件驱动结构的支柱。
Event Sourcing 这个太早了。05年的不一定有用。 将应用程序的状态的所有更改都存储为事件序列……前面都是老调重弹 Structuring the Event Handler Logic构建事件处理的逻辑这个没人提到过事务脚本/域模型是什么勾巴东西 事件逆转把10美元变成-10美元感觉这个水ppt挺有用的…… …………………………还有一些奇怪的点都看完估计我就困了主要看示例吧。
Event Sourcing in Go 写的不好都是代码片段不看了。 Transaction Script 事务脚本模式
6、ES相关的开源package
Benthos
其它
DDD与es之间的联系
事件溯源与事件驱动之间的区别和关系
写一个基于我们的新系统的例子