Tagtag Starter 采用现代化的前后端分离架构,前端负责用户交互与界面展示,后端负责业务逻辑与数据处理。系统设计遵循模块化、高内聚、低耦合的原则,便于扩展和维护。简单来说,就是把事情分清楚,各司其职,别乱来。
┌─────────────────────────────────────────────────────────────────────────┐
│ 客户端 (Browser) │
└─────────────────────────────────────────────────────────────────────────┘
│ HTTPS/HTTP
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ 前端应用 (frontend) │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────────────┐ │
│ │ 路由层 │ │ 视图层 │ │ 组件层 │ │ 状态层 │ │ API 客户端层 │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────────────┘ │
└─────────────────────────────────────────────────────────────────────────┘
│ RESTful API (JSON)
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ 后端应用 (Spring Boot) │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────────────┐ │
│ │ 控制层 │ │ 服务层 │ │ 业务层 │ │ 数据层 │ │ 基础设施层 │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────────────┘ │
└─────────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ 数据存储层 │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ MySQL │ │ Redis │ │ MinIO │ │ 其他存储 │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
└─────────────────────────────────────────────────────────────────────────┘
Tagtag Starter 系统由以下两个主要部分组成:
frontend 目录。基于 Vue 3 + Vite + TypeScript 构建的现代化单页应用 (SPA),采用了 Vben Admin 5 框架,使用 Tailwind CSS 和 Shadcn UI 进行界面开发。界面美观,交互流畅,用户体验一级棒。backend 目录下的多个 Java 模块。基于 Spring Boot 构建的模块化应用,负责提供 RESTful API 和数据持久化服务。稳定可靠,性能卓越,就像老黄牛一样任劳任怨。| 技术 | 版本 | 选型理由 |
|---|---|---|
| Spring Boot | 3.x | 现代化 Java 应用开发框架,提供自动配置、内嵌服务器等特性,简化开发流程。让开发者专注于业务逻辑,而不是配置文件。 |
| Java JDK | 17 | LTS 版本,提供更好的性能、安全性和新特性支持。用最新的技术,写最稳的代码。 |
| MyBatis Plus | 3.x | 简化 MyBatis 开发,提供代码生成、分页插件、逻辑删除等功能。少写代码,多摸鱼(开玩笑的)。 |
| Redis | 6.x | 用于缓存、会话管理和分布式锁,提高系统性能。让系统飞起来。 |
| Spring Security | 6.x | 强大的安全框架,支持 JWT 认证和权限控制。安全第一,别让黑客有机可乘。 |
| MySQL | 8.x | 稳定可靠的关系型数据库,适合存储结构化数据。数据存储的基石,数据都靠它。 |
| 技术 | 版本 | 选型理由 |
|---|---|---|
| Vue 3 | 3.x | 响应式前端框架,提供 Composition API,更好的类型支持和性能。用最新的框架,写最优雅的代码。 |
| TypeScript | 5.x | 静态类型检查,提高代码质量和开发效率。让 bug 无处遁形。 |
| Vite | 5.x | 现代化前端构建工具,提供快速的开发体验和优化的生产构建。开发体验一级棒,启动速度嗖嗖的。 |
| Pinia | 2.x | Vue 3 官方状态管理库,简洁易用,支持 TypeScript。状态管理,就这么简单。 |
| Vue Router | 4.x | Vue 官方路由管理库,支持组件级路由和嵌套路由。页面跳转,轻轻松松。 |
| Tailwind CSS | 3.x | 实用优先的 CSS 框架,提高样式开发效率,支持响应式设计。不用写一堆 CSS 文件了。 |
| Shadcn UI | 最新 | 可定制的 UI 组件库,基于 Tailwind CSS,提供现代化的设计风格。界面美观,交互流畅。 |
| pnpm | 10.x | 高效的包管理器,支持 Monorepo 结构,节省磁盘空间和安装时间。比 npm 更快,用过都说好。 |
Tagtag Starter 后端遵循严格的多模块架构,以分离基础设施、业务逻辑和 API 定义。这种设计使得系统各部分职责清晰,便于维护和扩展。简单来说,就是把事情分清楚,各司其职,别乱来。
注意:以下描述均在 cd backend 后的目录结构基础上进行说明。
┌─────────────────────────────────────────────────────────────────────────┐
│ 启动层 (tagtag-start) │
└─────────────────────────┬─────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ 模块层 (tagtag-module-*) │
└─────────────────────────┬─────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ 契约层 (tagtag-contract-*) │
└─────────────────────────┬─────────────────────────────────────────────────┘
│
▼
┌─────────────────────────┼─────────────────────────────────────────────────┐
│ 核心层 (tagtag-kernel) │
└─────────────────────────┬─────────────────────────────────────────────────┘
│
▼
┌─────────────────────────┼─────────────────────────────────────────────────┐
│ 框架层 (tagtag-framework) │
└─────────────────────────┬─────────────────────────────────────────────────┘
│
▼
┌─────────────────────────┼─────────────────────────────────────────────────┐
│ 通用层 (tagtag-common) │
└─────────────────────────────────────────────────────────────────────────┘
后端项目组织为以下几个层级:
tagtag-common)纯工具类,无 Spring 依赖,可独立于 Spring 框架使用。
tagtag-framework)基础设施集成。此层依赖于 Spring Boot 和其他第三方库,为上层提供技术支持。
tagtag-kernel)核心业务支持逻辑。提供业务开发所需的通用支持和扩展点。
@RateLimit, @RequirePerm, @RequireRole)tagtag-contract)定义模块间的接口和数据结构,采用契约优先设计。
tagtag-module)实际的业务实现,每个模块对应一个具体的业务域。
tagtag-start)应用入口点。聚合所有模块并提供配置文件。
application.yml)Tagtag Starter 前端采用现代化的 Monorepo 结构,基于 Vben Admin 5 框架构建,旨在提供高效、可扩展的前端开发体验。简单来说,就是把前端代码组织得井井有条,方便管理和维护。
注意:以下描述均在 cd frontend 后的目录结构基础上进行说明。
┌─────────────────────────────────────────────────────────────────────────┐
│ 应用层 (apps) │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ 路由层 │ │ 视图层 │ │ 组件层 │ │ 状态层 │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
└─────────────────────────┬─────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ 核心包层 (packages) │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ UI组件 │ │ Hooks │ │ 工具类 │ │ 服务层 │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
└─────────────────────────┬─────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ 内部工具层 (internal) │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ 构建工具│ │ 代码规范│ │ 配置文件│ │ 脚本工具│ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
└─────────────────────────────────────────────────────────────────────────┘
| 技术 | 版本 | 用途 |
|---|---|---|
| Vue 3 | 3.x | 响应式前端框架,提供 Composition API。用最新的框架,写最优雅的代码。 |
| TypeScript | 5.x | 静态类型检查,提高代码质量。让 bug 无处遁形。 |
| Vite | 5.x | 现代化前端构建工具,提供快速的开发体验。开发体验一级棒,启动速度嗖嗖的。 |
| Pinia | 2.x | Vue 3 官方状态管理库。状态管理,就这么简单。 |
| Vue Router | 4.x | Vue 官方路由管理库。页面跳转,轻轻松松。 |
| Tailwind CSS | 3.x | 实用优先的 CSS 框架,提高样式开发效率。不用写一堆 CSS 文件了。 |
| Shadcn UI | 最新 | 可定制的 UI 组件库,基于 Tailwind CSS。界面美观,交互流畅。 |
| pnpm | 10.x | 高效的包管理器,支持 Monorepo 结构。比 npm 更快,用过都说好。 |
前端项目主要分为三个层级:
apps)包含具体的应用实现,每个子目录对应一个独立的前端应用。
apps/tagtag: 主应用程序,包含完整的业务逻辑和界面。src/api: API 请求定义和封装。src/views: 页面视图组件。src/router: 路由配置和守卫。src/store: Pinia 状态管理。src/layouts: 布局组件。src/components: 业务组件。packages)提供可复用的核心功能和组件,供应用层使用。
packages/@core: 核心共享库。base: 基础设计系统、图标和共享工具。ui-kit: 封装的 UI 组件库。
shadcn-ui: 基于 Shadcn UI 的基础组件。form-ui: 表单组件封装。layout-ui: 布局组件封装。popup-ui: 弹窗、抽屉等组件封装。effects: 业务副作用与逻辑封装。
access: 权限控制逻辑。hooks: 通用 Hooks (如 useTabs, useRefresh)。request: 请求库封装。plugins: 第三方插件集成 (Echarts, Motion, Vxe-table)。preferences: 应用偏好设置管理。internal)提供构建、开发和维护所需的工具和配置。
internal/lint-configs: ESLint, Prettier, Stylelint 等代码规范配置。internal/vite-config: Vite 构建配置封装。internal/tailwind-config: Tailwind CSS 配置封装。internal/tsconfig: TypeScript 配置文件。