# linn **Repository Path**: zgxtech_admin/linn ## Basic Information - **Project Name**: linn - **Description**: Linn (溪谷)项目是一个推崇使用简约、规范化且面向领域开发的web应用程序框架。框架以DDD(Domain-Driven Design)和 CQRS (Command Query Responsibility Segregation)为指导思想构建。并为此提供相关基础框架、应用程序模式及灵活使用的构架功能。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 5 - **Created**: 2020-03-22 - **Last Updated**: 2024-10-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # linn #### 介绍 `Linn` (溪谷)项目是一个推崇使用简约、规范化且面向领域开发的web应用程序框架。框架以DDD(Domain-Driven Design)和 CQRS (Command Query Responsibility Segregation)为指导思想构建。并为此提供相关基础框架、应用程序模式及灵活使用的构架功能。 ![Linn](https://images.gitee.com/uploads/images/2020/0429/010620_f8b5246e_5585845.png "Linn商标.png") CQRS(Command Query Responsibility Segregation)是一种旨在将程序中读和写的需求分开的一种框架思想。它将数据的读和写的逻辑分开,大型分布式系统中,读和写通常不是来源于一个数据库。 - 命令模式(Command),通过一致性的方式处理业务逻辑命令,并转发给后端逻辑单元处理。可以避免大量重复的代码工作,比如日志、用户token的统一处理、执行上下文的处理,方便对应用程序进行追踪等。 - 请求模式(Query),通过一致性的方式方式处理对数据的请求,通常它不存在复杂的业务逻辑,会直接请求数据仓库返回所需数据。 将Command 和 Query分开有很多的好处,请参见相关文章。 `Domain-Driven Design` 在 CQRS模式中主要是在Command中使用。它主要利用`UBIQUITOUS LANGUAGE`和` Model-driven design`的思想进行业务需求和技术设计、开发。 > `UBIQUITOUS LANGUAGE`的使用主要是为团队建立对业务一致性的业务概念,而这些概念通过`Model-driven design`思想在编程中提现在代码里面。解决团队的沟通和后续知识的传递问题。 `Domain-Driven Design`中有几个概念 - Entity 领域实体 - ValueObject 值对象 - Aggerate Root 聚合根 - Context Bound 领域上下文 #### 软件架构 软件架构说明 1. 规范化代码组织方式和结构,比如程序中一般都会涉及到以下几个方面。 - Data Validation - Business Rule check - Business workflow - Communication pattern 这些部分应该明确且合理的分离开来,放在统一的位置,使用约定好的命名方式。 2. 实现CQRS,读写分离模式来处理数据的读和写。 - Command & CommandExecutor负责统一的写命令执行 - Query & CommandExecutor负责统一的读请求执行 3. 实现构建`Domain-Driven Design`的框架支持和分成结构定义支持。 4. 支持对Data Validation、Business Rule等扩展点支持。在多租户场景下,相同的用户故事,场景可能会使用不同的数据验证方式和应用不同的业务逻辑。 #### 安装教程 #### 使用说明 您可以通过[例子](https://gitee.com/zgxtech_admin/linn-samples)查看相关用法。 #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request