
架构|领域驱动设计
文章平均质量分 72
.NET跨平台
比较认真。编程就是算法和数据结构,算法和数据结构是编程的灵魂。
展开
-
闲谈秒杀系统(二)解决一致性问题
秒杀的核心关注是商品库存,有限的商品在同一时间被多个请求同时扣减,卖不出去是个问题,超卖更是个问题。要保证准确性,显而易见是一个难题。秒杀场景下的一致性问题,主要就是库存扣减的准确性问题。转载 2024-07-16 00:35:52 · 186 阅读 · 0 评论 -
工厂模式应用场景
工厂模式(Factory Pattern)是一种常见的设计模式,用于创建对象的方式。它通过定义一个用于创建对象的接口,但是将具体创建对象的逻辑延迟到子类中去实现。这样可以在不修改客户端代码的情况下,动态改变创建对象的方式。原创 2024-07-12 23:10:39 · 527 阅读 · 0 评论 -
系统设计和架构设计的异同点
总的来说,系统设计和架构设计都是软件开发中不可或缺的环节,它们共同负责将需求转化为具体的系统实现方案。系统设计更关注于功能的实现和细节的设计,而架构设计更关注于系统的整体结构和组成部分之间的关系。系统设计和架构设计是软件开发中的关键环节,它们在某些方面有着相似之处,但也存在一些不同之处。原创 2023-08-22 15:14:04 · 1735 阅读 · 0 评论 -
康威定律 分析
做到系统模块,服务自洽。项目团队,系统架构随着时间的推移,不断优化,业务不断发展。There is never enough time to do something right, but there is always enough time to do it over:时间再多,一件事也不可能做的完美,但是总有时间会做完一件事。再敏捷开发中,就是产品迭代,总会有 bug 修复,做到持续交付,获取反馈再快速相应反馈(bug)并交付。对于复杂的,需要协作完成的系统,沟通是必须要持续提升的问题。转载 2023-08-10 20:39:22 · 202 阅读 · 0 评论 -
DDD 领域服务和应用服务比较
在领域驱动设计(DDD)中,领域服务和应用服务是两个不同的概念。它们都是用于处理业务逻辑的组件,但它们在职责和使用场景上有所不同。原创 2023-07-22 02:01:05 · 1404 阅读 · 0 评论 -
仓储模式在DDD中有哪些优缺点?
仓储模式(Repository Pattern)是DDD中常用的设计模式之一,它主要用于将领域对象的持久化操作从应用程序的其他部分中分离出来。综上所述,仓储模式在DDD中具有明显的优点,但也需要谨慎使用,避免出现过度抽象和性能问题。原创 2023-05-19 17:51:48 · 1035 阅读 · 0 评论 -
微服务设计为什么要选择领域驱动设计
面对复杂问题,解决办法通常是拆分,模块化,化整为零。领域驱动建模DDD是面向业务,对业务领域的划分和整合,是逻辑层面。微服务是面向物理落地,是对应用的物理形态进行拆分和整合。从软件工程过程角度看,DDD的战略设计输出物,领域模型及划分的区域,是微服务的输入,一个区域对应一个微服务,微服务运行框架、平台可以承载所有的微服务,提供微服务统一的运行框架,也就是承载所有的业务领域。可见领域驱动与微服务是在软件不同阶段使用的工具,技术或方法论,围绕一个共同的目标,搭建企业业务中台,企业级业务复用,快速的需求响应能力。转载 2022-12-08 22:44:53 · 247 阅读 · 0 评论 -
Repository的实现
接口(公共操作)了,只需要实现自己对应的实体仓储接口就行了。需要什么类型的仓储,就定义一个对应的私有变量和只读的属性。接口,所以,实体的仓储不需要再实现。容器中,之后所有的地方都能用了。因为实体类的仓储接口继承。转载 2022-09-06 19:11:53 · 948 阅读 · 0 评论 -
DDD-事件
1、DDD中的事件分为两种类型:领域事件()和集成事件()。2、领域事件:在同一个微服务内的聚合之间的事件传递。使用进程内的通信机制完成。3、集成事件:跨微服务的事件传递。使用事件总线(EventBus)实现。转载 2022-09-03 13:04:21 · 1445 阅读 · 0 评论 -
重构要点学习
重构目的:为什么需要重构?重构是一种对软件内部接口的改善,目的是在不改变软件的可见行为的情况下,使其更易理解,修改成本更低。重构是避免过度设计的有效手段。重构的对象:到底重构什么(what)?大型重构主要针对:系统、模块、代码结构、类与类之间的关系等的重构。重构手段有:分层、模块化、解耦、抽象可复用组件等等。小型重构主要针对:类、函数、变量等代码级别的重构,比如规范命名、规范注释、消除超大类或函数、提取重复代码等等。重构手段:熟练掌握各种编码规范。重构的时机:什么转载 2022-05-29 19:21:28 · 252 阅读 · 0 评论 -
技术 - 中台
一 中台简要知识了解1.1 起由单个前台系统匹配单个后台系统,对于发展到一定程度的公司来说,逐渐不适应,所以需要做一个中台系统。何为中台系统?简单来说就是将【交易】【支付】【用户】【搜索】等重复的轮子封装起来,供各个项目进行使用,从而提高开发效率。1.2 案例1、 SuperCell(游戏公司:皇室战争、部落冲突、海岛奇兵)中台:支付系统、用户系统、开发工具、数据支持、基础设施、游戏引擎2、 阿里巴巴(互联网公司:淘宝、天猫、支付宝、聚划算)中台:用户中心、商品中心、交易中心、评价中心、搜转载 2022-05-26 00:11:41 · 1172 阅读 · 0 评论 -
读《中台架构与实现》
最早是在极客时间知道欧创新老师的,我也是他的课程《DDD实战课》的订阅者,后来欧老师基于这门课程做更多的实践与思考,完成了《中台架构与实现:基于 DDD 和微服务》这本书的写作,最近刚好读完了这本书。中台、微服务、DDD,这三个都是比较大的概念,每一个在市面上都有很多相关的书籍,一本书想要把三者都介绍得非常深入,不太容易,但本书很好地结合大量的案例将三者串联起来,能够让我们了解更多概念性内容之外,也能指导我们动手进行实践。从本书的副标题:基于 DDD 和微服务,可以得知:本书是介绍如何采用 DDD转载 2022-05-25 23:35:23 · 513 阅读 · 0 评论 -
中台架构学习
0.1. 平台平台只是将部分通用的公共能力独立为共享平台。虽然可以通过 API 或者数据对外提供公共共享服务,解决系统重复建设的问题,但这类平台并没有和企业内的其它平台或应用,实现页面、业务流程和数据从前端到后端的全面融合,并且没有将核心业务服务链路作为一个整体方案考虑,各平台仍然是分离且独立的。平台解决了公共能力复用的问题,但离中台的目标显然还有一段差距!0.2. 中台阿里对中台的定义:“中台是一个基础的理念和架构,把所有的基础服务用中台的思路建设,进行联通,共同支持上端的业务。业务中台更多的是支转载 2022-05-25 16:49:01 · 1239 阅读 · 0 评论 -
微服务与 DDD 基本概念
微服务与 DDD 基本概念应用程序包括展示模块,这是负责处理 UI 和消费远程服务的领域或业务逻辑模块,这是核心模块,应用程序的领域逻辑数据访问逻辑,它由负责访问数据库(SQL 或 NoSQL)的数据访问组件组成。应用集成逻辑,这包括消息通道,主要是基于消息代理(message brokers)应用程序必须要高可用,要支持垂直的向外拓展,因为有些子系统还会要求更高的伸缩性。并且应用程序必须是可以部署到多种架构环境的(多个公共云或本地云),并且理论上还是要跨平台的,要很容易的从 Window转载 2022-05-23 23:40:53 · 559 阅读 · 0 评论 -
DDD(十一,十二)【领域服务的规约模式】【Unity在DDD中的使用】
规 约(Specification)模式:第一次看到这东西是在microsoft NLayer项目中,它是微软对DDD的解说,就像petshop告诉了我们MVC如何使用一样,这个规约模式最重要的作用是实现了查询语句与查询条件的 分离,查询语句在底层是稳定的,不变的,而查询条件是和具体业务,具体领域有关的,是易变的,如果我们为每一个领域的每一个新需求都写一个新的方法,那就 会出现很多重复的代码,不利于程序的最终扩展!下面我们来看一个经典例子一个IOrderRepository的接口,定义了一个订单仓储O转载 2022-04-09 01:21:19 · 482 阅读 · 0 评论 -
DDD(九,十)【基础设施层~续】【 领域层】
在之前写的DDD~基础设施层文章中,提到了UnitOfWork,它里面有一些方法,但经过项目证明,不应该有Save和IsExplicitSubmit,而这个工作单元只起到了数据上下文统一的作用,如A和B对象需要在同一个上下文中工作,这时,我们可以引用工作单元的概念,而对于保存和提交操作,还是应该在局部方法里完成的。为了不去触发MSDTC,我会封装一个特殊的事务,来实现这个工作,而对于SQL2008来说,可以直接使用.net自己的TransactionScope实现,对于同一个数据库来说,它不会被提升为分布转载 2022-04-06 11:36:53 · 933 阅读 · 0 评论 -
DDD(八)【基础设施层】
最近被DDD吸引了阿,在这里感谢一下小佟,呵呵,领域驱动设计是个不错的东西,帮助我们把问题清晰化,这候对于复杂业务逻辑是很重要的,今天这一讲主要说一下DDD中的基础设施层(Infrastructure)是如何被我实现的。Infrastructure Layer:主要功能是对领域模块进行持久化的,在这个层中你需要把领域对象序列化到指定的元件中,可能是数据库,文件或者内存对象,当然它也要提供从物理元件取出数据到领域模型的功能,这是对应的。目前的DDD项目结果如下对于Infrastructure这个层我不转载 2022-04-06 11:06:51 · 3672 阅读 · 0 评论 -
DDD(七)【领域事件应用篇(订单处理变得更清晰)】
上一讲主要说了领域事件和领域总线,这并不是一个很容易理解的文章,所以本讲实例篇主要是为了补充上一讲的理论知识,本讲实例关注的是实际中的订单处理模块,我们知道,订单处理是电子商务的核心,往往在这里面,会有很多逻辑,在开发时,给我们带来了不少的难度,如何更好的分离关注点,是本讲的主题;本讲主要是修改订单状态后,为用户发通知为例,来以此更好的说一下领域事件在实际中的作用。前言 领域事件使用的设计模式是发布/订阅模式,或者叫观察者模式。一 订单的几种状态,在订单进入到其中一些状态时,需要通知用户 publi转载 2022-04-06 10:45:33 · 809 阅读 · 0 评论 -
DDD(六)【领域事件与事件总线】
谈谈它终于有些眉目了,搜刮了很多牛人的资料,英文的,中文的,民国文的,终于小有成就了,同时也做了个DEMO,领域事件这东西好,但需要你明白它之后才会说好,而对于明白领域事件这件事来说,它的门槛有点高,居然花了我三天的时间才把它搞定,嗨!占占给它的定义领域事件:Domain Event,是针对某个业务来说的,或者说针对某个聚合的业务来说的,例如订单生成这种业务,它可以同时对应一种事件,比如叫做OrderGeneratorEvent,而你的零散业务可能随时会变,加一些业务,减一些业务,而对于订单生成这个事转载 2022-04-06 10:24:49 · 917 阅读 · 0 评论 -
DDD之实体与值对象
传统的系统架构设计阶段,通常我们会将关注点放在数据上面,而不是领域上面。这种设计风格在软件开发中,使数据库占据了主导地位,我们总是有限考虑数据的属性(对应数据库的列)和关联关系(外键关联),而不是富有行为的领域概念。这样做的结果是直接将数据模型反映在对象模型上,导致这些表示领域模型的实体中含有大量的getter、setter方法,也就是贫血领域模型这不符合DDD的做法。与传统数据模型设计优先不同,DDD 是先构建领域模型,针对实际业务场景构建实体对象和行为,再将实体对象映射到数据持久化对象。传统数据模型不转载 2022-03-26 20:25:02 · 3804 阅读 · 0 评论 -
DDD领域驱动设计 思维导图
DDD理论学习整理笔记-AllDDD 理论脑图01.什么是DDDDDD学习-Chapter102.提炼问题域03.专注于核心领域04.模型驱动设计05.领域模型实现模式10.应用DDD的原则、实践与模式DDD学习-Chapter10DDD学习DDD学习,相关概念以及在盒马的实践基础...转载 2019-12-24 22:52:00 · 2801 阅读 · 0 评论 -
DDD 思维导图
DDD领域驱动设计方法论DDD领域建模与架构设计DDD领域建模(适合比较复杂的项目)DDD理论学习整理笔记-AllDDD分层架构 DDD 领域驱动设计DDD 代码层级实现领域驱动设计总览领域驱动设计(DDD)...转载 2022-03-26 14:59:35 · 388 阅读 · 0 评论 -
DDD(五)【我们应该知道的Model,DomainModel和ViewModel】
图在前目前项目中可能出现的三种Model模式,对于我们现在开发的一个项目,我觉得使用DDD的思想来设计模型比较清晰,使用DDD的思想把模型model分成了如下三种:下面是我微博中的截图:上面的图中把模型分成了ViewModel,它与页面相关,DomainModel,它与业务模块相关,Model,它与数据库相关,它是对数据表的一种映射,一般用XML来表示。文字说明在后下面我们来举个例子,用认识一下这三个模型:下面以用户业务为例,来讲一个这三种模型UserDomainModelpublic转载 2022-03-24 22:58:46 · 683 阅读 · 0 评论 -
DDD领域驱动设计
DDD领域驱动设计是什么1 DDD是什么?DDD是领域驱动设计,是Eric Evans于2003年提出的,离现在有17年。2 为什么需要DDD当软件越来越复杂,实际开发中,大量的业务逻辑堆积在一个巨型类中的例子屡见不鲜,代码的复用性和扩展性无法得到保证。为了解决这样的问题,DDD提出了清晰的分层架构和领域对象的概念,让面向对象的分析和设计进入了一个新的阶段,对企业级软件开发起到了巨大的推动作用。2.1 POP,OOP,DDD是如何解决问题面向过程编程(POP),接触到需求第一步考虑把需求自顶向下转载 2022-03-19 23:11:06 · 10508 阅读 · 1 评论 -
领域驱动基础知识点
领域驱动基础知识点核心域:是业务系统的核心。通用域:是为整个业务系统提供支持服务。支撑域:是专注于业务系统的某一重要业务,支撑完善业务系统。统一语言:便于交流,方便设计。语言中的动词,【付款、下单】可以转换为命令或领域事件语言中的名词,【商品、订单】有时可以直接转换为代码中的模型、聚合、服务边界举例:电商系统:销售子域:核心域商品子域,物流子域:支撑域领域服务:表述领域行为,是对应用服务的具体细分,具体的某一个环节应用服务:表述应用行为,具体操作,从开始到结束的每个环节比如购物车结转载 2022-03-19 17:35:27 · 285 阅读 · 0 评论 -
你或许以为你不需要领域驱动设计
一、易于腐化的软件设计犹记得刚刚参加工作时,是地图厂商四维图新集团旗下的一家子公司,主要从事规划测绘相关软件研发的公司。当时我的项目是为勘测设计院提供相对应的应用软件,对地理信息和规划相关的图纸信息,几乎已经专业水平。事实上,规划设计大概和软件设计类似,有规划的设计、或无规划的设计,造成的结果几乎是天壤之别。我们或许很容易就能设想到一个毫无规划设计的城市,纵横交错的路网、杂乱无章式的建筑布局、各种凌乱的棚户区设计,恰好象征着软件设计的无序性,也恰好体现了软件企业在经费不足、组织缺乏管理、开发者能力不足、转载 2022-03-16 23:36:36 · 186 阅读 · 0 评论 -
.net ef core 领域设计代码转换(上篇)
一、前言.net core 2.0正式版已经发布几个月了,经过研究,决定把项目转移过来,新手的话可以先看一些官方介绍传送门:https://docs.microsoft.com/zh-cn/dotnet/core/由于在领域设计模型上遇到了一些坑,故给大家分享出来自己的一些解决方案。ok,直接上干货,大概结构如下:比较教科书式的架构。二、领域层领域实体值对象规约接口工作单元接口仓储接口聚合跟划分,我们先建立一个简单的用户实体三、仓储层引用Microsoft.Ent转载 2022-02-07 23:17:55 · 197 阅读 · 0 评论 -
实施领域驱动设计(Implementing Domain Driven Design翻译)
使用 ABP 框架实现领域驱动设计的实用指南Apractical guide for implementing the Domain Driven Designwith the ABP Framework引言介绍这是实现领域驱动的实用指南设计(DDD)。虽然实现细节依赖于ABP 框架基础设施,但是核心概念、原则和模式适用于任何类型的解决方案,即使它不是.NET 解决方案。目标本书的目标是:●介绍和解释DDD 架构、概念、原则、模式和构建块。●解释ABP框架提供的框架结构和解决方案结构●引入转载 2022-02-03 17:00:17 · 1370 阅读 · 1 评论 -
客户端开发CSharp命名规范手册
命名规范使用驼峰法命名类名使用首字母大写的驼峰法命名,例如:PlayerObject方法名使用首写字母大写命名方式,例如:Init()成员变量、局部变量都统一使用首字母小写的命名方式,例如:localValue;属性首字母大写,字段统一小写;(属性是指带get,set访问器的)常量和enum的命名都使用大写+下划线的方式,例如:MAX_PLAYER_NUMBER抽象类名使用Abstract开头,例如:AbstractCharacter,接口使用I开头,例如:ITask避免在类和变量的命名中使转载 2021-12-22 00:41:37 · 851 阅读 · 0 评论 -
编码及代码审查遵循此规范
术语定义Pascal 大小写将标识符的首字母和后面连接的每个单词的首字母都大写。例如:CodingStandardCamel 大小写将标识符的首字母小写,而后面连接的每个单词的首字母都大写。例如:codingStandard命名规范文件及文件夹1.文件/文件夹名遵从Pascal命名法,无特殊情况,扩展名小写。2.C#类使用统一而又通用的文件扩展名: C# 类名 .cs,正常情况下,一个cs文件中不能含有两个及以上的类。代码注释public、protect转载 2021-12-13 00:21:25 · 579 阅读 · 0 评论 -
前端开发规范
一、命名规范驼峰式命名法由小(大)写字母开始,后续每个单词首字母都大写1.1 变量命名方法:小驼峰式命名法。命名规范:前缀应当是名词。(函数的名字前缀为动词,以此区分变量和函数)命名建议:尽量在变量名字中体现所属类型,如:length、count等表示数字类型;而包含name、title表示为字符串类型。// 好的命名方式var maxCount = 10;var tableTitle = 'LoginTable'; // 不好的命名方式var setCount = 10;var g转载 2021-12-13 00:18:08 · 967 阅读 · 0 评论 -
实体对象、值对象和接口三者之间关系的六条定律
实体对象可以持有实体对象和值对象;实体对象、值对象和接口可以引用接口;值对象可以持有实体对象和值对象;实体对象、值对象和接口可以从接口中继承;实体对象可以从实体对象中继承;值对象可以从值对象中继承;不允许出现不在上面定律里的关系。...转载 2021-12-01 23:15:09 · 266 阅读 · 0 评论 -
三层架构到DDD分层架构的演变
三层架构传统的三层架构主要分为业务接口层、业务逻辑层、数据访问层业务接口层:主要是API的定义,包括资源路径定义、请求报文接受、响应报文返回、请求编码等定义的内容;业务逻辑层:主要做业务逻辑处理,这一层包括数据映射DTO转VO,业务核心逻辑编写,组合不同数据仓库,做业务逻辑;数据访问层:主要做数据存储,包括数据映射VO转PO,数据接口的定义,映射XML的编写。DDD分层架构DDD分层架构也可以叫四层架构,主要由用户接口层、应用层、领域层、基础层;用户接口层:负责向用户显示信息和解释用转载 2021-11-02 00:36:58 · 1314 阅读 · 0 评论 -
DDD(二,三,四)【概念中的DDD】【microsoft NLayerApp项目中的层次结构图】【充血模型和失血模型】
概念中的DDDDDD: 领域驱动设计,它是对面向对象的的分析和设计(OOAD,Object Orient Analysis Design)的一个补充,对技术框架进行了分层规划,同时对每个类进行了策略和类型划分。领域模型是领域驱动的核心 ,采用DDD的设计思想,业务逻辑不再集中在几个大型的类上,而是在大量相对小的领域对象上,这些类具有自己的状态和行为,每个类都是完成的独立的,并与现实领域的业务对象形成一种映射。基于DDD的架构设计,保证了系统的可维护性,扩展性和敏捷性,在处理复杂业务逻辑方面有着明显的优势!转载 2021-10-07 01:22:36 · 369 阅读 · 0 评论 -
DDD 基本概念
DDD 概念术语领域子域界限上下文上下文映射图架构实体值对象领域服务领域事件模块聚合工厂资源库集成界限上下文应用程序在线建模工具https://www.diagrameditor.com/webapp/?splash=0&ui=atlas&tr=0&gh=0&gl=0&gapi=0&od=0&db=0&lang=enDDD(Doman Driv转载 2021-09-24 00:21:36 · 334 阅读 · 0 评论 -
DDD(一)【~DDD从零起步架构说明】
看了传说中的弦哥对园子里.Net项目分层与文件夹结构大全(最佳架子奖,吐槽奖,阴沟翻船奖揭晓),我也来说说我的DDD架构吧,主要是看了微软NlayerApp之后,自己写的一个,以后将会应用到我的项目之中。架构说明:0-Modeling and Design:架构的UML层次图,我认为每个项目的架构都应该先有UML图,再是进行具体的代码设计1-Presentation:UI层,它的实现是多种的,你可以是B/s的webpage,web mvc,web api,也可以是C/s的winform,wpf等等转载 2021-09-12 00:30:55 · 736 阅读 · 0 评论 -
软件架构编年史
软件架构编年史20 世纪 50 年代非结构化编程~1951 – 汇编20 世纪 60 年代结构化编程分层: 用户界面、业务逻辑数据存储都在一层。~1958 – Algol20 世纪 70 年代过程式/函数式编程~1970 – Pascal~1972 – C1979 – MVC 模式(Model-View-Controller)20 世纪 80 年代面向对象编程 (但其思想在 20 世纪 60 年代晚期已经第一次提出)分层: 两层,第一层是用户界面,第二层是转载 2021-09-11 23:53:21 · 364 阅读 · 0 评论 -
设计模式三大分类-创建型、结构型、行为型
设计模式可以分为创建型、结构型和行为型。创建型对类的现实化进行了抽象,能够使软件模块做到与对象的创建和组织无关。功能:类的创建创建型: 单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式结构型描述类和对象之间如何进行有效的组织,以形成良好的软件体系结构,主要的方式是使用继承关系来组织各个类。功能: 组合代替、类与类之间的关系结构型: 适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式行为型描述 类和对象之间如何交互以及如何分配职责功能:关注对象与行为的分离、就是转载 2021-09-11 23:50:09 · 665 阅读 · 0 评论 -
架构设计——接口设计
开发中接口常用方式:前后端交互(Rest),系统交互(RPC)最普遍的一种方式。接口文档详细,异常定义清晰满足最小需求原则:尽可能的减少参数,更不允许添加无用的参数。单一职责:接口粒度应该尽量小且保持单一职责,不要写大而全的接口新老兼容:新版兼容旧版接口优先于类软件架构设计的六大原则单一职责原则(Single Responsibility Principle - SRP)原文:There should never be more than one reason for a clas转载 2021-08-27 00:29:26 · 3756 阅读 · 0 评论 -
接口隔离原则有哪三种应用?原则中的“接口”该如何理解?
今天,我们学习SOLID 原则中的第四个原则:接口隔离原则。对于这个原则,最关键就是理解其中“接口”的含义。那针对“接口”,不同的理解方式,对应在原则上也有不同的解读方式。此外,接口隔离原则跟我们之前讲到的单一职责原则还有点儿类似,所以,我也会具体讲一下它们间的区别和联系。如何理解“接口隔离原则”?接口隔离原则(ISP)客户端不应该强迫依赖它不需要的接口。理解“接口”隔离原则的关键,就是理解其中“接口”二字。这条原则中,我们可以把“接口”理解为下面三种东西:一组 API 接口.转载 2021-08-27 00:18:56 · 200 阅读 · 0 评论