# clean_ddd **Repository Path**: sagech/clean_ddd ## Basic Information - **Project Name**: clean_ddd - **Description**: clean architecture + basic ddd 整洁架构和基本的DDD组件。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2023-06-06 - **Last Updated**: 2023-06-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # CleanD Clean Architecture & Basic DDD components 整洁架构和基本的DDD组件。是我认为比较常见和易用的服务化架构模式。可用于对应一个领域团队和一个服务单元。 本项目演示了这个架构模式。可以作为项目脚手架,也可以被当作库来使用。 本项目是Typescript和nodejs技术栈。加入了一些特定于语言的工具。 ## 整洁架构 整洁架构(Clean Architecture) 也被称六边形架构。大致如下图所示。更多讨论可见网上搜索结果。这个概念比较明确,没有太多争议,即使有些说法不同也不影响核心逻辑。 ![](./docs/clean-main.png) ## 基本的DDD 主要是指一些基本的DDD战术组件。如下图所示。注意是红框框住的一部分,其他部分是DDD的其他层次,不是本组件库涵盖的内容。 ![](./docs/ddd-write.png) ## 项目结构 * ./src 源代码,以clean architecture 层次组织。 * ./app.ts:App是个比较特殊的类,这里作为一个全局的对象容器,并支持Ioc能力。App会被注入到很多对象中,以使这些对象可以通过它访问到依赖对象。 * enterprise 层:领域相关的逻辑主要在这里,包括DDD的常用模式:repository、factory、entity、aggregate、service。这里提供的代码都是些基础代码,具体的领域对象需要在这些基础代码的基础上去具体实现。 * 附赠:一个支持树形entity结构的repository。 * application 层:usecases、功能相关的逻辑在这里。 * interface 层:这一层包括了主要的转换、表现、传递等目的的逻辑。这里提供了两个方面的基础代码。 * collections.ts:数据访问的基本接口,数据库、外部数据等增删查改基础操作可以以这个为基础。这里的接口都是异步的。 * populate.ts:一个重要的工具,用于plain object和class instance的相互转换。plain object用于传输、序列化等。class instance具有方法和初始化逻辑,是aggregate、entity的必要支撑。所以这里完成aggregate、entity到VO、DO等对象的转换。 * tec 层:具体的技术代码,比如数据库访问、外部接口访问等等。目前这里没有基础代码。仅是一个占位符。 ``` . ├── README.md ├── docs ├── package-lock.json ├── package.json ├── src │ ├── app.ts │ ├── application │ ├── enterprise │ ├── index.ts │ ├── interface │ ├── tec └── tsconfig.json ``` ## 工具 * cuid - 用于产生id,生成的id比uuid小一些,略有优势。 * typescript-monads - 引入两个常用的monad,一个Maybe,一个是Result。更加结构化地处理null和error,推荐。 * zod - object validate框架。