Skip to content

模块说明

MolanDev Cloud 采用 Maven 多模块结构,清晰的模块划分便于开发和维护。


整体结构

molandev-backend/
├── molandev-apis/                     # API 接口定义(Feign 接口)
├── molandev-common/                   # 公共模块
├── molandev-base/                     # 基础服务(用户/角色/菜单/文件/消息/任务)
├── molandev-knowledge/                # 知识库服务(RAG 检索增强生成)
├── molandev-xiuxian/                  # AI 修仙服务(AI 对话、技能系统)
├── molandev-gateway/                  # 微服务网关
├── molandev-standalone-service/       # 单体模式启动入口
└── deploy/                            # 部署配置
    ├── compose/                       # Docker Compose 配置
    ├── configs/                       # 配置文件
    └── sql/                           # 数据库脚本

设计理念

服务拆分不再按功能垂直划分,而是按业务域聚合。molandev-base 整合了系统管理、文件、消息、任务等基础能力,molandev-knowledgemolandev-xiuxian 专注于 AI 相关业务。单体模式通过 molandev-standalone-service 启动,微服务模式通过 molandev-gateway + 各服务独立部署。


模块详解

1. API 模块 (molandev-apis)

职责: 定义服务间调用的 Feign 接口和 DTO。

特点:

  • 接口定义与实现分离
  • 支持单体和微服务双模
  • 统一的 API 规范

示例:

java
// Feign 接口定义
@FeignClient(
    name = "${molandev.service-name.molandev-base:molandev-base}",
    contextId = "sysUserApi",
    path = "/feign/user"
)
public interface SysUserApi {
    @GetMapping("/admin")
    UserDto getAdmin(@RequestParam("id") String id);
}

接口即服务

通过 molandev-rpc 框架,Feign 接口在单体模式下自动转为本地调用,微服务模式下为远程 HTTP 调用,业务代码无需感知差异。


2. 基础服务 (molandev-base)

职责: 基础业务服务,整合了系统管理、文件、消息、任务等功能。

包含功能:

功能包路径说明
系统管理sys/用户、角色、菜单、部门、字典
文件管理file/文件上传下载、回收站
消息管理msg/消息发送、站内信、WebSocket 推送
任务调度task/定时任务管理

启动类:

java
@SpringBootApplication
public class BaseApp {
    public static void main(String[] args) {
        SpringApplication.run(BaseApp.class, args);
    }
}

服务整合

molandev-base 整合了原 sys-servicefile-servicemsg-servicetask-service 的所有功能,减少服务间通信开销,简化部署和运维。


3. 知识库服务 (molandev-knowledge)

职责: RAG 检索增强生成,文档摄入、向量化、检索。

包含功能:

功能包路径说明
文档摄入ingest/文档格式转换、智能分片、向量化存储
检索系统retrieval/向量检索、混合检索、重排序
RAG 问答rag/Standard RAG、Agent RAG

4. AI 修仙服务 (molandev-xiuxian)

职责: AI 对话、技能系统、工具调用。

包含功能:

功能包路径说明
AI 对话chat/多模型对话、流式响应
技能系统skill/Meta-Tool 模式、动态技能加载
工具调用tool/函数调用、权限控制

5. 网关服务 (molandev-gateway)

职责: 微服务模式的统一入口、路由转发、认证鉴权。

技术栈:

  • Spring Cloud Gateway (WebFlux)
  • Redis Reactive
  • Knife4j Gateway

核心功能:

功能说明
路由转发根据路径转发到对应服务
认证鉴权统一 Token 验证
权限转发按前缀过滤权限码,转发给后端服务
限流熔断请求限流,保护后端

6. 单体模式入口 (molandev-standalone-service)

职责: 单体模式的启动入口,合并 base、knowledge、xiuxian 模块。

实现方式:

  • 通过 @ComponentScan 合并扫描多个模块
  • 排除微服务相关依赖(Nacos、Feign、RabbitMQ)
  • 共享数据库连接

启动类:

java
@SpringBootApplication
@ComponentScan({
    "com.molandev.base",
    "com.molandev.knowledge",
    "com.molandev.xiuxian"
})
public class StandaloneApp {
    public static void main(String[] args) {
        SpringApplication.run(StandaloneApp.class, args);
    }
}

7. 公共模块 (molandev-common)

职责: 公共工具类、基础配置、统一响应等。

包含内容:

包路径说明
annotation/自定义注解(@HasPermission、@OpLog)
config/配置类(MyBatis Plus、Redis)
constant/常量定义
core/核心类(JsonResult、PageQuery)
enums/枚举类
exception/异常定义
utils/工具类

核心类:

java
// 统一响应
@Data
public class JsonResult<T> implements Serializable {
    private String code;    // 状态码
    private String msg;     // 消息
    private T data;         // 数据
}

依赖关系

molandev-standalone-service / molandev-gateway (应用入口)
    ↓ 依赖
molandev-base / molandev-knowledge / molandev-xiuxian (业务服务)
    ↓ 依赖
molandev-apis (API 层)
    ↓ 依赖
molandev-common (公共层)
    ↓ 依赖
molandev-framework (框架层)

包命名规范

com.molandev.{module}
├── controller      # 控制器
├── service         # 服务类(直接继承 ServiceImpl)
├── mapper          # 数据访问
├── entity          # 实体类
├── dto             # 数据传输对象
├── enums           # 枚举
├── constant        # 常量
├── config          # 配置类
└── utils           # 工具类

命名示例:

类型命名规则示例
实体类{Name}EntitySysUserEntity
服务类{Name}ServiceSysUserService
Mapper{Name}MapperSysUserMapper
Controller{Name}ControllerSysUserController

API 分离设计

为什么要分离 API?

  1. 服务契约: API 定义作为服务间的契约
  2. 依赖隔离: 调用方只需依赖 API,不需依赖实现
  3. 版本管理: API 可独立版本化,避免稳定性问题
  4. 循环依赖: 避免服务间的循环依赖

使用示例

java
// 1. API 定义 (molandev-apis)
@FeignClient(name = "${molandev.service-name.molandev-base:molandev-base}")
public interface UserApi {
    @GetMapping("/user/get")
    UserVO getUser(@RequestParam("id") Long id);
}

// 2. 服务实现 (molandev-base)
@Service
public class UserServiceImpl implements UserApi {
    @Override
    public UserVO getUser(Long id) {
        // 实现逻辑
    }
}

// 3. 其他服务调用 (molandev-xiuxian)
@Service
public class XiuxianService {
    @Autowired
    private UserApi userApi;  // 只依赖 API,不依赖实现

    public void process() {
        UserDto user = userApi.getAdmin("1");
        // Single 模式: 本地调用
        // Cloud 模式: HTTP 远程调用
    }
}

如何新增模块

1. 创建 API 模块

xml
<!-- molandev-apis/your-api/pom.xml -->
<dependencies>
    <dependency>
        <groupId>com.molandev</groupId>
        <artifactId>molandev-common</artifactId>
    </dependency>
</dependencies>

定义 Feign 接口:

java
@FeignClient(
    name = "${molandev.service-name.your-service:your-service}",
    path = "/feign/your"
)
public interface YourApi {
    @GetMapping("/get")
    YourDto get(@RequestParam("id") String id);
}

2. 创建业务模块

xml
<!-- your-service/pom.xml -->
<dependencies>
    <dependency>
        <groupId>com.molandev</groupId>
        <artifactId>your-api</artifactId>
    </dependency>
</dependencies>

创建启动类:

java
@SpringBootApplication
public class YourApp {
    public static void main(String[] args) {
        SpringApplication.run(YourApp.class, args);
    }
}

3. 添加到单体模式(可选)

如果需要在单体模式下使用,修改 molandev-standalone-service/pom.xml:

xml
<dependency>
    <groupId>com.molandev</groupId>
    <artifactId>your-service</artifactId>
</dependency>

并在 StandaloneApp 中添加包扫描:

java
@ComponentScan({
    "com.molandev.base",
    "com.molandev.knowledge",
    "com.molandev.your"  // 添加你的模块
})

最佳实践

1. 模块职责单一

每个模块只负责一个领域的功能,避免职责混乱。

2. 依赖管理

  • API 模块不依赖具体实现
  • 服务模块依赖 API 模块
  • 避免循环依赖

3. 代码分层

严格遵循分层架构:Controller → Service → Mapper

4. 命名规范

  • 类名:大驼峰
  • 方法名:小驼峰
  • 常量:全大写下划线分隔

总结

MolanDev Cloud 的模块结构特点:

  • 模块化设计: 清晰的模块划分
  • API 分离: 接口与实现分离
  • 服务整合: base 模块整合基础功能
  • 双模支持: 单体和微服务
  • 易于扩展: 新增模块简单

下一步