当前位置: 首页 > news >正文

(一)毛子整洁架构(Domain Layer/Repository Pattern/Result Pattern/Error Pattern)


文章目录

  • 项目地址
  • 一、整洁架构概念
    • 1.1 各个分层的功能
      • 1. Domain核心部件
      • 2. Application Layer
      • 3. Infrastructure layer
      • 3. Presenetation layer
    • 1.2 项目数据库
  • 二、Domain Layer
    • 2.1 Apartments 实体
      • 1. Current Value Obj
      • 2. Money Value Obj
      • 3. Apartment 类
    • 2.2 User 实体
      • 1. User类
    • 2.3 添加领域事件
      • 1. 添加领域事件接口
      • 2. 修改Entity基类
      • 3. 给User添加用户注册的事件
  • 三、Repository Pattern
    • 3.1 添加IRepository
    • 3.2 IUnitOfWork
  • 四、Error Pattern
    • 4.1 创建Error类
    • 4.1 实例化Error类
  • 五、Resualt Pattern


项目地址

  • 教程作者:
  • 教程地址:
  • 代码仓库地址:
  • 所用到的框架和插件:
dbt 
airflow

一、整洁架构概念

1.1 各个分层的功能

1. Domain核心部件

名称解释举例
Entities实体,具有唯一标识和生命周期的业务对象Order, User, Product
Value Objects值对象,无唯一标识,仅由值组成Email, Money, Address
Domain Events领域事件,表示领域内发生的某件重要事情OrderPlaced, UserRegistered
Domain Services不属于某个实体,但包含重要业务逻辑的服务PaymentService, CurrencyConverter
Interfaces接口,定义领域层依赖的外部功能(例如存储、邮件)IOrderRepository, INotificationService
Exceptions业务异常,用于明确抛出领域问题InsufficientBalanceException, InvalidEmailException
Enums枚举类型,定义有限状态或类型集OrderStatus, UserRole

2. Application Layer

内容解释
Orchestrates the Domain协调领域层 —— 应用层调用实体、值对象、领域服务等,把业务用例组织起来。
Contains business logic包含应用级别的业务逻辑 —— 不是业务规则本身,而是业务流程的组合,如"下订单 → 发送确认邮件"。
Defines the Use Cases定义用例 —— 每个用例通常表示用户或系统行为,如“创建事件”、“取消订单”、“生成报告”等。
Application services应用服务类 —— 是执行用例逻辑的容器,依赖领域模型(Entities、ValueObjects),协调外部接口(如仓储)。
CQRS with MediatR使用 CQRS + MediatR 模式来分离命令(Command)与查询(Query),提升结构清晰度、可测试性。

3. Infrastructure layer

  • 所有的外部系统:
    1. Databases
    2. Messaging
    3. Email providers
    4. file upload/download
    5. Storage services
    6. Identity
    7. System lock

3. Presenetation layer

  • 定义程序的入口
  • Rest Api
  • Middleware
  • DI setup

1.2 项目数据库

在这里插入图片描述

二、Domain Layer

2.1 Apartments 实体

1. Current Value Obj

  • 货币Value Obj
public record Currency
{internal static readonly Currency None = new("");public static readonly Currency Usd = new("USD");public static readonly Currency Eur = new("EUR");//私有构造函数,只能在类内部创建实例private Currency(string code){Code = code;}//只能在初始化时赋值public string Code { get; init; }//工厂方法:根据传入的字符串创建货币实例public static Currency FromCode(string code){return All.FirstOrDefault(c => c.Code == code) ??throw new ApplicationException("The currency code is invalid");}//All 集合列出了所有合法的货币public static readonly IReadOnlyCollection<Currency> All = new[]{Usd,Eur};
}

2. Money Value Obj

  • 主要内容:
    1. 运算符重载,对money的类型进行了判断,不能随便相加
    2. 对 0, 空,的Money进行了定义
public record Money(decimal Amount, Currency Currency)
{//运算符重载,必须相同的Currency才能相加public static Money operator +(Money first, Money second){if (first.Currency != second.Currency){throw new InvalidOperationException("Currencies have to be equal");}return new Money(first.Amount + second.Amount, first.Currency);}

相关文章:

(一)毛子整洁架构(Domain Layer/Repository Pattern/Result Pattern/Error Pattern)

文章目录 项目地址一、整洁架构概念1.1 各个分层的功能1. Domain核心部件2. Application Layer3. Infrastructure layer3. Presenetation layer1.2 项目数据库二、Domain Layer2.1 Apartments 实体1. Current Value Obj2. Money Value Obj3. Apartment 类2.2 User 实体1. User类…...

XSS ..

Web安全中的XSS攻击详细教学&#xff0c;Xss-Labs靶场通关全教程&#xff08;建议收藏&#xff09; - 白小雨 - 博客园跨站脚本攻击&#xff08;XSS&#xff09;主要是攻击者通过注入恶意脚本到网页中&#xff0c;当用户访问该页面时&#xff0c;恶意脚本会在用户的浏览器中执行…...

Github Action部署node项目

Github Action部署node项目 个人学习的时候&#xff0c;作为前端感觉这个CICD基本流程还是有必要了解的&#xff0c;这里记录一下Github Action部署node项目的流程&#xff0c;也算是一个学习的过程 首先肯定是要有一个可运行的node项目 编写部署文件 部署文件放置在.githu…...

高频面试题:设计秒杀系统,用Redis+Lua解决超卖

高频面试题&#xff1a;设计秒杀系统&#xff0c;用RedisLua解决超卖 **1. 问题背景****2. 解决方案&#xff1a;Redis Lua****为什么选择Redis Lua&#xff1f;****核心代码逻辑****Java调用示例&#xff08;Spring Boot&#xff09;** **3. 方案优势****4. 面试回答话术***…...

2、Kafka Replica机制与ISR、HW、LEO、AR、OSR详解

Kafka 作为分布式高可用消息队列&#xff0c;其副本&#xff08;Replica&#xff09;机制是实现高可靠性和数据一致性的核心。本文将系统介绍 Kafka 的 Replica 机制&#xff0c;并详细解释 ISR、HW、LEO、AR、OSR 等关键概念。 一、Kafka Replica机制概述 在分布式系统中&am…...

生成式 AI:从工具革命到智能体觉醒,2025 年的质变与突破

在上海胸科医院的手术室里&#xff0c;一束全息投影正精准勾勒出患者肺部的三维血管模型。主刀医生手持机械臂的瞬间&#xff0c;AI 导航系统已同步完成 200 次路径演算&#xff0c;将毫米级误差控制在 0.3 毫米以内 —— 这个真实发生在 2025 年的临床场景&#xff0c;标志着生…...

安卓基础(拖拽)

当用户长按或拖拽某个视图&#xff08;如按钮、图片&#xff09;时&#xff0c;需要提供视觉反馈&#xff08;即阴影&#xff09;。这行代码通常在拖拽事件的处理逻辑中&#xff0c;例如&#xff1a; view.setOnLongClickListener(v -> {// 创建拖拽阴影DragShadowBuilder …...

IoTDB磁盘I/O性能监控与优化指南

一、磁盘I/O性能观测核心指标 在现代计算机系统中&#xff0c;磁盘I/O性能对整体系统表现至关重要。为有效监控和优化磁盘I/O性能&#xff0c;需关注以下核心指标&#xff1a; ‌I/O读写延迟‌&#xff1a;衡量从发起I/O请求到接收响应的时间间隔。‌IOPS&#xff08;Input/O…...

java每日精进 5.06【框架之功能权限】

0.概述 0.1 整体架构概述 这个RBAC权限系统基于Spring Security和Token认证机制&#xff0c;主要包含以下核心组件&#xff1a; 用户-角色-菜单的多对多关系模型 基于Token的认证流程 细粒度的权限控制&#xff08;菜单权限、按钮权限&#xff09; 灵活的权限配置方式 1…...

静态NAT

实验需求 PC1和PC2通过静态NAT去访问服务器 实验拓扑 图13-1 静态NAT 实验步骤 步骤1&#xff1a;IP地址的配置 PC1的配置 PC2的配置 R1的配置 <Huawei>system-view [Huawei]undo info-center enable [Huawei]sysname R1 [R1]interface g0/0/0 [R1-GigabitEt…...

RabbitMQ-api开发

前言 MQ就是接收并转发消息 核心概念 admin是用户 每个虚拟机上都有多个交换机 快速入门 引入依赖 <dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.22.0</version></dependen…...

const MachineTree getMachineTree() ; MachineTree getMachineTree() const; 区别?

这两个函数声明在语法和语义上有明显的区别&#xff0c;它们的用途和行为也不同。让我们逐一分析它们的区别&#xff1a; 1. const MachineTree &getMachineTree(); 这个函数声明表示&#xff1a; 返回类型&#xff1a;const MachineTree &&#xff0c;即返回一个 M…...

使用DevTools工具调试前端页面,便捷脚本,鸿蒙调试webView

参考官方文章 便捷脚本 创建文本&#xff0c;复制修改后缀为bat 建立bat文件 echo off setlocal enabledelayedexpansion:: Initialize port number and PID list set PORT9222 set PID_LIST:: Get the list of all forwarded ports and PIDs for /f "tokens2,5 delims…...

浏览器存储 Cookie,Local Storage和Session Storage

什么是Cookie&#xff1f; 存储容量&#xff1a;一般限制在 4KB 以内。数据有效期&#xff1a;可以设置过期时间&#xff0c;若未设置&#xff0c;则在浏览器关闭时失效。数据共享&#xff1a;在同一域名下&#xff0c;不同页面可以共享cookie数据。并且在每次 HTTP 请求时&am…...

校内周赛题(思维题)

这次周赛的题目没有什么很难的代码实现&#xff0c;基本上都是对思路的把握。 与君共勉&#x1f339; 选取x个数&#xff0c;看能不能使得这x个数相加的结果是奇数。 如果x是偶数&#xff0c;他的分布肯定是一个奇数一个偶数若干个两两配对的奇数若干个两两配对的偶数。 如果…...

在 GitLab 中部署Python定时任务

在 GitLab 中部署定时任务(如每天早8点运行Python脚本并存储结果)可以通过 GitLab CI/CD 结合 计划任务(Scheduled Pipelines) 实现。以下是详细步骤和准备工作: 1. 准备工作 (1) 项目结构准备 确保项目包含: Python脚本(如 main.py):执行核心算法逻辑。 结果存储模…...

学习黑客Windows权限体系

已思考 24 秒 借着 Week 2 Day 4 的号角&#xff0c;我们把权限系统这条「双持长枪」摆上擂台&#xff1a;一边是 Windows DACL/icacls&#xff0c;另一边是 Linux sudoers。你将看到二者在授权语法、常见配置漏洞与提权打法上的一一对照——尤其关注 可写服务&#xff08;Wr…...

DXFViewer进行中2 -> 直线 解析+渲染 ✅已完成

DXFViewer进行中 : -&#xff1e;封装OpenGL -&#xff1e; 解析DXF直线-CSDN博客https://blog.csdn.net/qq_25547755/article/details/147723906 上篇博文 解析dxf直线635条 1. DXFViewer.h #pragma once #include "Application.h" #include <stdio.h> #inc…...

当智能科技遇上医疗行业会帮助疫苗如何方便管理呢?

​ 随着科技的发展&#xff0c;智能科技在医疗行业的应用日益广泛&#xff0c;在疫苗管理方面&#xff0c;温湿度监控设备的安装可以简化管理流程&#xff0c;提高监测效率&#xff0c;降低疫苗损坏的风险。 疫苗管理面临着诸多挑战和需求。疫苗的存储、运输、接种等环节都…...

Excel 数据 可视化 + 自动化!Excel 对比软件

各位Excel小能手们&#xff01;你们有没有过要对比两个Excel表格数据差异&#xff0c;却看得眼睛都花了的经历&#xff1f;其实啊&#xff0c;现在有专门的Excel文件比较软件能帮咱解决这大难题。这软件就是用来快速找出两个或多个Excel表格数据不同之处&#xff0c;还能把修改…...

Selenium模拟人类行为,操作网页的方法(全)

看到有朋友评论问&#xff0c;用selenium怎么模仿人类行为&#xff0c;去操作网页的页面呢&#xff1f; 我想了想&#xff0c;这确实是一个很大的点&#xff0c;不应该是一段代码能解决的&#xff0c; 就像是,如果让程序模拟人类的行为。例如模拟人类买菜&#xff0c;做饭&am…...

LVS负载均衡群集解析:理解LVS-NAT的工作原理

目录 一、LVS群集应用基础 1.群集技术概述 2.LVS虚拟服务器 3.NFS共享存储服务 二、案例&#xff1a;地址转换模式&#xff08;LVS-NAT&#xff09; 1.资源清单 2.修改主机名 3.配置负载调度器&#xff08;LVS上&#xff09; 4.配置节点服务器(web1、web2) 5.测试LVS…...

Leetcode Hot 100最长连续序列

题目描述 思路 思路1 我们对数组进行排序&#xff0c;通过遍历数组&#xff0c;如果前一个数组的值1等于当前数组的值&#xff0c;计数count&#xff0c;如果中断了&#xff0c;计算当前最大连续长度的值ans&#xff0c;并且统计值count重新置为1&#xff0c;最后返回count与…...

【东枫科技】代理英伟达产品:交换机系统

文章目录 总体详细&#xff1a;NVIDIA Spectrum SN5000详细&#xff1a;NVIDIA Spectrum SN2100详细&#xff1a;NVIDIA Spectrum SN4700详细&#xff1a;NVIDIA Spectrum SN2010详细&#xff1a;NVIDIA Spectrum SN4600详细&#xff1a;NVIDIA Spectrum SN3700详细&#xff1a…...

[前端]Javascript获取元素宽度

元素宽度属性对比示意图 ---------------------------------- | 外边距&#xff08;margin&#xff09; | -------------------------------- | | 边框&#xff08;border&#xff09; | | | -------------------------- | | | …...

MySQL + Qwen3-0.5B + Flask + Dify 工作流部署指南

1. 安装MySQL和PyMySQL 安装MySQL # 在Ubuntu/Debian上安装 sudo apt update sudo apt install mysql-server sudo mysql_secure_installation# 启动MySQL服务 sudo systemctl start mysql sudo systemctl enable mysql 安装PyMySQL pip install pymysql 使用 apt 安装 My…...

项目三 - 任务3:学生多态方式喂养宠物

在本次实战中&#xff0c;我们通过创建动物类及其子类&#xff08;猫、狗、鸟&#xff09;&#xff0c;并设计学生类的喂养方法&#xff0c;深入学习了Java中的多态和方法重载。学生类通过重载方式为每种动物提供专门的喂养方法&#xff0c;而通过多态方式则仅用一个方法即可喂…...

TypeScript速成

1、类型推断 这里的str已经推断为string类型&#xff0c;不能像JavaScript一样直接给str赋值number类型 2、类型注解 let str:stringabc 或者 let str:string strabc 3、类型断言 因为typescript会判定这个item可能为undefined类型&#xff0c;但是我们人为可以确定item一…...

CompletableFuture的底层ForkJoinPool

什么是 ForkJoinPool&#xff1f;它和普通线程池&#xff08;ThreadPoolExecutor&#xff09;有什么区别&#xff1f; 答案要点&#xff1a; ForkJoinPool 是 Java 7 引入的线程池&#xff0c;专为 分治任务 设计&#xff0c;支持递归任务拆分&#xff08;Fork&#xff09;和…...

高等数学第五章---定积分(§5.1定积分的概念、性质和应用)

5.1 定积分的概念及性质 一、引例 在学习定积分之前&#xff0c;我们先通过两个具体的例子来感受其思想和方法。 例1 曲边梯形的面积 定义&#xff1a;曲边梯形 由连续曲线 y f ( x ) y f(x) yf(x)&#xff08;假设 f ( x ) ≥ 0 f(x) \ge 0 f(x)≥0 在所讨论的区间上&…...

Java基础学完,继续深耕(0506)SQL--多表关系

多表关系 一对多(多对一) 一对一 多对多 一对多 场景&#xff1a;部门与员工的关系 &#xff08;一个部门下有多个员工&#xff09;。 实现&#xff1a;在数据库表中多的一方&#xff0c;添加字段&#xff0c;来关联一的一方的主键。 现在只是在语法上关联了&#xff0c;…...

python打卡day17

聚类的基础知识 知识点 聚类的指标聚类常见算法&#xff1a;kmeans聚类、dbscan聚类、层次聚类三种算法对应的流程 实际在论文中聚类的策略不一定是针对所有特征&#xff0c;可以针对其中几个可以解释的特征进行聚类&#xff0c;得到聚类后的类别&#xff0c;这样后续进行解释也…...

洛谷---P1629 邮递员送信

题目描述 有一个邮递员要送东西&#xff0c;邮局在节点 1。他总共要送 n−1 样东西&#xff0c;其目的地分别是节点 2 到节点 n。由于这个城市的交通比较繁忙&#xff0c;因此所有的道路都是单行的&#xff0c;共有 m 条道路。这个邮递员每次只能带一样东西&#xff0c;并且运…...

第11次:用户注册(简要版)

1、定义模板 在templates文件夹下边新建register.html&#xff0c;代码如下&#xff1a; <html lang"en"> <head><meta charset"UTF-8"><title>注册</title> </head> <body><!--{%是模板标签&#xff0c; …...

【IP101】图像特征提取技术:从传统方法到深度学习的完整指南

&#x1f31f; 特征提取魔法指南 &#x1f3a8; 在图像处理的世界里&#xff0c;特征提取就像是寻找图像的"指纹"&#xff0c;让我们能够识别和理解图像的独特性。让我们一起来探索这些神奇的特征提取术吧&#xff01; &#x1f4da; 目录 基础概念 - 特征的"体…...

对windows的简单介绍

目录 一、Windows 操作系统概述 1. 定义与定位 2. 核心目标 二、历史与版本演变 1. 早期阶段&#xff08;1985–1995&#xff09; 2. NT 内核时代&#xff08;1996–2009&#xff09; 3. 现代操作系统&#xff08;2012–至今&#xff09; 三、系统架构与技术特性 1. 内…...

Waymo公司正在加快其位于亚利桑那州新工厂的无人驾驶出租车(robotaxi)生产进度

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

JavaSE核心知识点01基础语法01-03(流程控制:顺序、分支、循环)

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 JavaSE核心知识点01基础语法01-03&#xff0…...

信息论01:从通信到理论的飞跃

信息论01&#xff1a;从通信到理论的飞跃 1. 信息论的诞生与发展 1.1 前信息论时代&#xff08;1920s之前&#xff09; 信息与消息的混淆&#xff1a;传统认知中将信息等同于消息本身先驱者奠基&#xff1a; 哈里奈奎斯特 (1924)&#xff1a;提出《影响电报速度的某些因素》…...

Pandas 的透视与逆透视

目录 1. 透视 1.1 pivot 1.2 pivot_table 2.逆透视 1. 透视 透视是长表变宽表。 pivot() 和 pivot_table()两个函数都可以做到&#xff0c;后者可以聚合前者不行。 特性df.pivot()df.pivot_table()重复值处理要求索引和列的组合唯一&#xff0c;否则报错 ValueError允许…...

AI大模型驱动的智能座舱研发体系重构

随着AI大模型&#xff08;如LLM、多模态模型&#xff09;的快速发展&#xff0c;传统智能座舱研发流程面临巨大挑战。传统座舱研发以需求驱动、功能固定、架构封闭为特点&#xff0c;而AI大模型的引入使得座舱系统向自主决策、动态适应、持续进化的方向发展。 因此思考并提出一…...

【东枫科技】代理英伟达产品:DPU

NVIDIA BlueField-3 DPU 400Gb/s 基础设施计算平台 NVIDIA BlueField -3 数据处理单元 (DPU) 是第三代基础设施计算平台&#xff0c;使企业能够构建从云端到核心数据中心再到边缘的软件定义、硬件加速的 IT 基础设施。借助 400Gb/s 以太网或 NDR 400Gb/s InfiniBand 网络连接…...

【KWDB 创作者计划】一文掌握KWDB的时序表管理

前言 本文是在对时序数据库有一定了解&#xff0c;并且KWDB的数据库操作了解后进行学习的文章安排&#xff0c;如果对时序数据库与KWDB的数据库操作还不怎么了解的可以查阅官网的文档进行提前学习&#xff0c;当有了这些基础后&#xff0c;本文就是对时序数据表的一个管理操作…...

《算法导论(第4版)》阅读笔记:p9-p9

《算法导论(第4版)》学习第 6 天&#xff0c;p9-p9 总结&#xff0c;总计 1 页。 一、技术总结 1. data structure A data structure is a way to store and organize data in order to facilitate access and modifications(数据结构是一种存储和组织数据的方式&#xff0c…...

Facebook隐私保护措施的优缺点解析

在这个数字化的时代&#xff0c;隐私保护已成为公众关注的热点话题。Facebook&#xff0c;作为全球最大的社交媒体平台之一&#xff0c;其隐私保护措施自然也受到了广泛的关注和讨论。本文将对Facebook的隐私保护措施进行解析&#xff0c;探讨其优点与缺点&#xff0c;并探讨如…...

深入了解linux系统—— 进程地址空间

前言 程序地址空间 在之前&#xff0c;我们学习C/C时&#xff0c;多多少少都看过这样的一张图 我们现在通过下面这一段代码看一下&#xff1a; #include <stdio.h> #include <unistd.h> #include <stdlib.h> int g_unval; int g_val 100; int main(int…...

电动加长杆金属硬密封法兰式蝶阀泄漏等级解析:水、蒸汽、油品介质的可靠选择-耀圣

电动加长杆金属硬密封法兰式蝶阀泄漏等级解析&#xff1a;水、蒸汽、油品介质的可靠选择 在工业流体控制领域&#xff0c;电动金属硬密封蝶阀凭借其卓越的密封性能和耐高温高压特性&#xff0c;成为水、蒸汽、油品等介质的核心控制设备。其泄漏等级作为衡量阀门性能的关键指标…...

win11共享打印机主机设置

1.首先打开设置&#xff0c;选择打印机和扫描仪点击打印机属性&#xff0c;将共享窗口的共享这台打印机和在客户端计算机上呈现打印作业这两项勾选上。 2.通过cmd命令 gpedit.msc 打开本地组策略编辑器。 3.网络访问选择仅来宾 4.将账户来宾状态选择启用 5.将拒绝从网络访问这台…...

Flowable7.x学习笔记(二十)查看流程办理进度图

前言 本文是基于继承Flowable的【DefaultProcessDiagramCanvas】和【DefaultProcessDiagramGenerator】实现的自定义流程图生成器&#xff0c;通过自定义流程图生成器可以灵活的指定已经执行过的节点和当前正在活跃的节点样式&#xff0c;比如说已经执行完成的节点我们标绿&…...

【计算机网络 第8版】谢希仁编著 第四章网络层 地址类题型总结

小结 个人觉得地址类在网络层算好做的题&#xff0c;这部分知识本身并不多&#xff0c;理解到位了就是2进制和10进制的换算题了。而且这种题给你一小时例题和标答&#xff0c;肯定自己都能悟出来。但是计网网络层的整体我感觉很散&#xff0c;老师讲的也乱七八糟的&#xff0c…...