# lolly **Repository Path**: AZcoding/lolly ## Basic Information - **Project Name**: lolly - **Description**: 微服务脚手架 基于Gin+Grpc (附带代码生成工具) - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2023-07-09 - **Last Updated**: 2024-02-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## lolly脚手架 > 该脚手架使用gin+gRPC框架,未经过生产环境的考验,但整合了作者在开发方向上的知识积累,是作者关于一些软件设计思想的一次实践。 **2023-06** > 整体架构参考了go-zero框架,HTTP和RPC层均围绕MODEL层进行设计与开发。这是很传统的MVC架构,围绕数据库实体的映射类进行开发。这种架构非常容易理解,在简单的CRUD场景下,开发速度是比较快的。但当业务逻辑开始复杂起来,因为没有明确好实现业务需求所需要的关键方法,与MODEL层进行交互的service会变得越来越臃肿,相应地,负责编排service的controller层会变得像流水账一样,晦涩难懂。而且一旦涉及到数据库字段的更改、中间件更换等情况,代码的需要进行改动的范围会比较大。 ![Architecture](README.assets/Architecture-16954354057821.png) **2023-09** > 重构,引入领域驱动设计(DDD)、命令查询责任分离(CQRS)、事件总线(Event Bus)等设计思想与组件。各个分层围绕领域层进行设计,依赖于抽象的接口,而不是具体的对象。 > > 该架构是一种混合架构,核心点是领域层。 > > 领域层(Domain)中的领域对象(DomainObejct)和仓库(Repository)应该在开发前期就确定好。尤其是领域对象,应该充分考虑到对象的各个属性,因为领域对象会在领域层和适配器层(Adapters)层之间传递,相当于在业务逻辑和技术实现之间传递。 > > 应用层(App)将领域层定义好的各种业务方法按照查询(Query)和命令(Command)进行了分离,当业务逻辑变得复杂起来的时候,这种分离可以使得开发者更快熟悉各个业务方法和整体的业务流程。 > > 端口层(ports)使得应用可以轻松适配不同的通信协议,不管是什么协议,都可以使用应用层去完成对应的逻辑。 > > 适配器层(Adapters)将具体的技术实现完全从业务逻辑中分离了出来,而且更加方便我们进行测试。 > > 架构参考:https://github.com/ThreeDotsLabs/wild-workouts-go-ddd-example > > 作者的练习demo: https://gitee.com/AZcoding/ddd-practice ![Architecture](README.assets/Architecture.png)