@rdmind/rdmind 0.0.9-alpha.1 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.knowledge/.ext/.bmad-core/agent-teams/team-all.yaml +15 -0
- package/.knowledge/.ext/.bmad-core/agent-teams/team-fullstack.yaml +19 -0
- package/.knowledge/.ext/.bmad-core/agent-teams/team-ide-minimal.yaml +11 -0
- package/.knowledge/.ext/.bmad-core/agent-teams/team-no-ui.yaml +14 -0
- package/.knowledge/.ext/.bmad-core/agents/analyst.md +84 -0
- package/.knowledge/.ext/.bmad-core/agents/architect.md +85 -0
- package/.knowledge/.ext/.bmad-core/agents/bmad-master.md +110 -0
- package/.knowledge/.ext/.bmad-core/agents/bmad-orchestrator.md +147 -0
- package/.knowledge/.ext/.bmad-core/agents/dev.md +81 -0
- package/.knowledge/.ext/.bmad-core/agents/pm.md +84 -0
- package/.knowledge/.ext/.bmad-core/agents/po.md +79 -0
- package/.knowledge/.ext/.bmad-core/agents/qa.md +90 -0
- package/.knowledge/.ext/.bmad-core/agents/ra.md +74 -0
- package/.knowledge/.ext/.bmad-core/agents/sm.md +65 -0
- package/.knowledge/.ext/.bmad-core/agents/ux-expert.md +69 -0
- package/.knowledge/.ext/.bmad-core/checklists/architect-checklist.md +440 -0
- package/.knowledge/.ext/.bmad-core/checklists/change-checklist.md +184 -0
- package/.knowledge/.ext/.bmad-core/checklists/pm-checklist.md +372 -0
- package/.knowledge/.ext/.bmad-core/checklists/po-master-checklist.md +434 -0
- package/.knowledge/.ext/.bmad-core/checklists/story-dod-checklist.md +96 -0
- package/.knowledge/.ext/.bmad-core/checklists/story-draft-checklist.md +155 -0
- package/.knowledge/.ext/.bmad-core/checklists/trd-checklist.md +226 -0
- package/.knowledge/.ext/.bmad-core/core-config.yaml +22 -0
- package/.knowledge/.ext/.bmad-core/data/bmad-kb.md +809 -0
- package/.knowledge/.ext/.bmad-core/data/brainstorming-techniques.md +38 -0
- package/.knowledge/.ext/.bmad-core/data/elicitation-methods.md +156 -0
- package/.knowledge/.ext/.bmad-core/data/technical-preferences.md +5 -0
- package/.knowledge/.ext/.bmad-core/data/test-levels-framework.md +148 -0
- package/.knowledge/.ext/.bmad-core/data/test-priorities-matrix.md +174 -0
- package/.knowledge/.ext/.bmad-core/enhanced-ide-development-workflow.md +248 -0
- package/.knowledge/.ext/.bmad-core/install-manifest.yaml +512 -0
- package/.knowledge/.ext/.bmad-core/tasks/advanced-elicitation.md +119 -0
- package/.knowledge/.ext/.bmad-core/tasks/analyze-prd.md +123 -0
- package/.knowledge/.ext/.bmad-core/tasks/apply-qa-fixes.md +150 -0
- package/.knowledge/.ext/.bmad-core/tasks/brownfield-create-epic.md +162 -0
- package/.knowledge/.ext/.bmad-core/tasks/brownfield-create-story.md +149 -0
- package/.knowledge/.ext/.bmad-core/tasks/correct-course.md +72 -0
- package/.knowledge/.ext/.bmad-core/tasks/create-brownfield-story.md +314 -0
- package/.knowledge/.ext/.bmad-core/tasks/create-deep-research-prompt.md +280 -0
- package/.knowledge/.ext/.bmad-core/tasks/create-doc.md +103 -0
- package/.knowledge/.ext/.bmad-core/tasks/create-next-story.md +114 -0
- package/.knowledge/.ext/.bmad-core/tasks/document-project.md +345 -0
- package/.knowledge/.ext/.bmad-core/tasks/execute-checklist.md +88 -0
- package/.knowledge/.ext/.bmad-core/tasks/facilitate-brainstorming-session.md +138 -0
- package/.knowledge/.ext/.bmad-core/tasks/generate-ai-frontend-prompt.md +53 -0
- package/.knowledge/.ext/.bmad-core/tasks/index-docs.md +175 -0
- package/.knowledge/.ext/.bmad-core/tasks/kb-mode-interaction.md +77 -0
- package/.knowledge/.ext/.bmad-core/tasks/nfr-assess.md +345 -0
- package/.knowledge/.ext/.bmad-core/tasks/qa-gate.md +163 -0
- package/.knowledge/.ext/.bmad-core/tasks/review-story.md +316 -0
- package/.knowledge/.ext/.bmad-core/tasks/risk-profile.md +355 -0
- package/.knowledge/.ext/.bmad-core/tasks/shard-doc.md +187 -0
- package/.knowledge/.ext/.bmad-core/tasks/test-design.md +176 -0
- package/.knowledge/.ext/.bmad-core/tasks/trace-requirements.md +266 -0
- package/.knowledge/.ext/.bmad-core/tasks/validate-next-story.md +136 -0
- package/.knowledge/.ext/.bmad-core/tasks/validate-trd.md +158 -0
- package/.knowledge/.ext/.bmad-core/templates/architecture-tmpl.yaml +651 -0
- package/.knowledge/.ext/.bmad-core/templates/brainstorming-output-tmpl.yaml +156 -0
- package/.knowledge/.ext/.bmad-core/templates/brownfield-architecture-tmpl.yaml +478 -0
- package/.knowledge/.ext/.bmad-core/templates/brownfield-prd-tmpl.yaml +281 -0
- package/.knowledge/.ext/.bmad-core/templates/competitor-analysis-tmpl.yaml +349 -0
- package/.knowledge/.ext/.bmad-core/templates/front-end-architecture-tmpl.yaml +273 -0
- package/.knowledge/.ext/.bmad-core/templates/front-end-spec-tmpl.yaml +360 -0
- package/.knowledge/.ext/.bmad-core/templates/fullstack-architecture-tmpl.yaml +947 -0
- package/.knowledge/.ext/.bmad-core/templates/market-research-tmpl.yaml +253 -0
- package/.knowledge/.ext/.bmad-core/templates/prd-tmpl.yaml +203 -0
- package/.knowledge/.ext/.bmad-core/templates/project-brief-tmpl.yaml +222 -0
- package/.knowledge/.ext/.bmad-core/templates/qa-gate-tmpl.yaml +103 -0
- package/.knowledge/.ext/.bmad-core/templates/story-tmpl.yaml +138 -0
- package/.knowledge/.ext/.bmad-core/templates/trd-tmpl.yaml +198 -0
- package/.knowledge/.ext/.bmad-core/user-guide.md +530 -0
- package/.knowledge/.ext/.bmad-core/utils/bmad-doc-template.md +327 -0
- package/.knowledge/.ext/.bmad-core/utils/workflow-management.md +71 -0
- package/.knowledge/.ext/.bmad-core/workflows/brownfield-fullstack.yaml +298 -0
- package/.knowledge/.ext/.bmad-core/workflows/brownfield-service.yaml +188 -0
- package/.knowledge/.ext/.bmad-core/workflows/brownfield-ui.yaml +198 -0
- package/.knowledge/.ext/.bmad-core/workflows/greenfield-fullstack.yaml +241 -0
- package/.knowledge/.ext/.bmad-core/workflows/greenfield-service.yaml +207 -0
- package/.knowledge/.ext/.bmad-core/workflows/greenfield-ui.yaml +236 -0
- package/.knowledge/.ext/.bmad-core/working-in-the-brownfield.md +606 -0
- package/.knowledge/.ext/coding/ddd-architecture.md +223 -0
- package/.knowledge/.ext/coding/java-standards.md +308 -0
- package/.knowledge/.ext/coding/mybatis-standards.md +407 -0
- package/.knowledge/.ext/coding/sql-standards.md +263 -0
- package/.knowledge/.ext/coding/thrift-service.md +292 -0
- package/.knowledge/BMAD.md +255 -0
- package/.knowledge/coding.md +135 -0
- package/dist/package.json +4 -3
- package/dist/src/config/extension.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/generated/git-commit.js.map +1 -1
- package/dist/src/services/McpPromptLoader.js +1 -1
- package/dist/src/services/McpPromptLoader.js.map +1 -1
- package/dist/src/services/prompt-processors/atFileProcessor.js +1 -1
- package/dist/src/services/prompt-processors/atFileProcessor.js.map +1 -1
- package/dist/src/ui/commands/mcpCommand.js.map +1 -1
- package/dist/src/ui/components/ContextSummaryDisplay.js.map +1 -1
- package/dist/src/ui/components/Tips.js +1 -1
- package/dist/src/ui/components/Tips.js.map +1 -1
- package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js.map +1 -1
- package/dist/src/ui/components/messages/ToolGroupMessage.test.js.map +1 -1
- package/dist/src/ui/components/subagents/create/CreationSummary.js.map +1 -1
- package/dist/src/ui/hooks/shellCommandProcessor.test.js.map +1 -1
- package/dist/src/ui/hooks/usePhraseCycler.js +2 -2
- package/dist/src/ui/hooks/usePhraseCycler.js.map +1 -1
- package/dist/src/utils/installationInfo.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -3
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
# DDD架构规范
|
|
2
|
+
|
|
3
|
+
## 架构分层
|
|
4
|
+
|
|
5
|
+
### 分层结构
|
|
6
|
+
|
|
7
|
+
| 层级 | 职责 | 依赖关系 |
|
|
8
|
+
| ------------------ | -------------------------------- | ------------------------------------- |
|
|
9
|
+
| **start** | 应用启动入口、Thrift协议暴露 | 依赖 app 层 |
|
|
10
|
+
| **app** | 应用服务层、协调领域对象完成用例 | 依赖 domain 层,可依赖 Thrift DTO |
|
|
11
|
+
| **domain** | 领域层、核心业务逻辑 | **不依赖任何外部DTO,只使用领域对象** |
|
|
12
|
+
| **infrastructure** | 基础设施层、技术细节实现 | 依赖 domain 层接口 |
|
|
13
|
+
| **common** | 通用组件层、工具类和常量 | 无外部依赖 |
|
|
14
|
+
|
|
15
|
+
### 分层职责详解
|
|
16
|
+
|
|
17
|
+
#### Start层(启动层)
|
|
18
|
+
|
|
19
|
+
- **职责**:应用启动、Thrift服务暴露、请求路由
|
|
20
|
+
- **特点**:只负责协议转换,不包含业务逻辑
|
|
21
|
+
- **依赖**:仅依赖App层
|
|
22
|
+
|
|
23
|
+
#### App层(应用服务层)
|
|
24
|
+
|
|
25
|
+
- **职责**:协调领域对象完成用户用例、事务管理
|
|
26
|
+
- **特点**:可以依赖Thrift DTO,负责DTO与领域对象转换
|
|
27
|
+
- **依赖**:依赖Domain层接口
|
|
28
|
+
|
|
29
|
+
#### Domain层(领域层)
|
|
30
|
+
|
|
31
|
+
- **职责**:核心业务逻辑、领域规则、业务概念
|
|
32
|
+
- **特点**:纯业务逻辑,无外部技术依赖
|
|
33
|
+
- **依赖**:不依赖任何外部技术
|
|
34
|
+
|
|
35
|
+
#### Infrastructure层(基础设施层)
|
|
36
|
+
|
|
37
|
+
- **职责**:数据持久化、外部服务调用、技术实现
|
|
38
|
+
- **特点**:实现Domain层定义的接口
|
|
39
|
+
- **依赖**:依赖Domain层接口
|
|
40
|
+
|
|
41
|
+
#### Common层(通用组件层)
|
|
42
|
+
|
|
43
|
+
- **职责**:工具类、常量、通用组件
|
|
44
|
+
- **特点**:无业务逻辑,可被各层使用
|
|
45
|
+
- **依赖**:无外部依赖
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## 依赖关系约束
|
|
50
|
+
|
|
51
|
+
### 核心原则
|
|
52
|
+
|
|
53
|
+
**严格遵循依赖倒置原则,确保领域层不被外部技术细节污染**
|
|
54
|
+
|
|
55
|
+
### 依赖规则
|
|
56
|
+
|
|
57
|
+
- **domain 层**:核心业务逻辑,**绝对不允许**依赖 Thrift DTO、外部API、数据库等
|
|
58
|
+
- **app 层**:可以依赖 Thrift DTO(如 `xxxReq`、`xxxResp`),负责DTO与领域对象的转换
|
|
59
|
+
- **infra 层**:实现 domain 层定义的接口,不能反向依赖 domain 层
|
|
60
|
+
- **start 层**:只依赖 app 层,不直接调用 domain 层
|
|
61
|
+
|
|
62
|
+
### 依赖方向图
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
Start层 → App层 → Domain层 ← Infrastructure层
|
|
66
|
+
↓ ↓ ↑
|
|
67
|
+
Common层 ← Common层 ← Common层
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## 分层实现规范
|
|
73
|
+
|
|
74
|
+
### 实现顺序(必须遵循)
|
|
75
|
+
|
|
76
|
+
1. **第一优先级**:实现 domain 层(核心业务逻辑,无外部依赖)
|
|
77
|
+
2. **第二优先级**:实现 infra 层(实现 domain 层接口)
|
|
78
|
+
3. **第三优先级**:实现 app 层(协调 domain 层,依赖 infra 层)
|
|
79
|
+
4. **第四优先级**:实现 start 层(依赖 app 层,暴露 Thrift 接口)
|
|
80
|
+
|
|
81
|
+
### 依赖处理策略
|
|
82
|
+
|
|
83
|
+
**当需要调用下层依赖或外部依赖时,必须先生成TODO说明,而不是立即实现**
|
|
84
|
+
|
|
85
|
+
```java
|
|
86
|
+
// TODO标记规范
|
|
87
|
+
// TODO: 依赖 [模块名].[类名].[方法名]
|
|
88
|
+
// 说明:此方法需要调用[具体描述]
|
|
89
|
+
// 实现时机:在[具体层]实现完成后实现
|
|
90
|
+
// 当前状态:等待依赖实现
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### 分层调用流程
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
Start层 (Thrift DTO) → App层 (DTO转换) → Domain层 (领域对象) → Infrastructure层
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## 常见架构错误
|
|
102
|
+
|
|
103
|
+
### Domain层依赖错误
|
|
104
|
+
|
|
105
|
+
❌ **错误**:Domain层直接使用Thrift DTO
|
|
106
|
+
✅ **正确**:Domain层只使用领域对象,App层负责DTO转换
|
|
107
|
+
|
|
108
|
+
**解决方案**:
|
|
109
|
+
|
|
110
|
+
```java
|
|
111
|
+
// ❌ 错误示例
|
|
112
|
+
public class CircleDomainService {
|
|
113
|
+
public void createCircle(CreateCircleReq request) { // 错误:直接使用Thrift DTO
|
|
114
|
+
// 业务逻辑
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// ✅ 正确示例
|
|
119
|
+
public class CircleDomainService {
|
|
120
|
+
public void createCircle(Circle circle) { // 正确:使用领域对象
|
|
121
|
+
// 业务逻辑
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### App层DTO创建错误
|
|
127
|
+
|
|
128
|
+
❌ **错误**:App层创建新的入参/出参DTO
|
|
129
|
+
✅ **正确**:App层直接使用Thrift DTO,不创建新对象
|
|
130
|
+
|
|
131
|
+
**解决方案**:
|
|
132
|
+
|
|
133
|
+
```java
|
|
134
|
+
// ❌ 错误示例
|
|
135
|
+
public class CircleAppServiceImpl {
|
|
136
|
+
public CreateCircleResult createCircle(CreateCircleRequest request) { // 错误:创建新DTO
|
|
137
|
+
// 业务逻辑
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// ✅ 正确示例
|
|
142
|
+
public class CircleAppServiceImpl {
|
|
143
|
+
public CreateCircleResp createCircle(CreateCircleReq request) { // 正确:使用Thrift DTO
|
|
144
|
+
// 业务逻辑
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### 分层调用错误
|
|
150
|
+
|
|
151
|
+
❌ **错误**:Start层直接调用Domain层
|
|
152
|
+
✅ **正确**:Start层只调用App层,App层调用Domain层
|
|
153
|
+
|
|
154
|
+
**解决方案**:
|
|
155
|
+
|
|
156
|
+
```java
|
|
157
|
+
// ❌ 错误示例
|
|
158
|
+
public class CircleThriftServiceImpl {
|
|
159
|
+
@Resource
|
|
160
|
+
private CircleDomainService circleDomainService; // 错误:直接依赖Domain层
|
|
161
|
+
|
|
162
|
+
public CreateCircleResp createCircle(Context ctx, CreateCircleReq request) {
|
|
163
|
+
circleDomainService.createCircle(request); // 错误:跨层调用
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// ✅ 正确示例
|
|
168
|
+
public class CircleThriftServiceImpl {
|
|
169
|
+
@Resource
|
|
170
|
+
private CircleAppService circleAppService; // 正确:依赖App层
|
|
171
|
+
|
|
172
|
+
public CreateCircleResp createCircle(Context ctx, CreateCircleReq request) {
|
|
173
|
+
return circleAppService.createCircle(request); // 正确:调用App层
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### 依赖倒置错误
|
|
179
|
+
|
|
180
|
+
❌ **错误**:Infrastructure层反向依赖Domain层
|
|
181
|
+
✅ **正确**:Infrastructure层实现Domain层接口
|
|
182
|
+
|
|
183
|
+
**解决方案**:
|
|
184
|
+
|
|
185
|
+
```java
|
|
186
|
+
// ❌ 错误示例
|
|
187
|
+
public class CircleRepositoryImpl {
|
|
188
|
+
@Resource
|
|
189
|
+
private CircleDomainService circleDomainService; // 错误:反向依赖
|
|
190
|
+
|
|
191
|
+
public void save(Circle circle) {
|
|
192
|
+
// 实现逻辑
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// ✅ 正确示例
|
|
197
|
+
public class CircleRepositoryImpl implements CircleRepository { // 正确:实现Domain层接口
|
|
198
|
+
public void save(Circle circle) {
|
|
199
|
+
// 实现逻辑
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## 质量检查清单
|
|
207
|
+
|
|
208
|
+
### DDD架构检查
|
|
209
|
+
|
|
210
|
+
- [ ] 是否严格遵循了DDD分层架构?
|
|
211
|
+
- [ ] 是否正确处理了DTO与领域对象转换?
|
|
212
|
+
- [ ] 是否避免了Domain层依赖外部DTO?
|
|
213
|
+
- [ ] 是否按层逐步实现?(domain→infra→app→start)
|
|
214
|
+
- [ ] 是否使用TODO标记了依赖关系?
|
|
215
|
+
- [ ] 是否遵循了依赖倒置原则?
|
|
216
|
+
- [ ] 是否避免了跨层调用?
|
|
217
|
+
- [ ] 是否实现了正确的分层调用流程?
|
|
218
|
+
|
|
219
|
+
### 代码开发检查
|
|
220
|
+
|
|
221
|
+
- [ ] 是否生成了完整的MyBatis映射文件?
|
|
222
|
+
- [ ] 是否包含了必要的注释和校验?
|
|
223
|
+
- [ ] 是否实现了领域对象与DO的双向转换?
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
# Java开发规范
|
|
2
|
+
|
|
3
|
+
## 值对象设计规范
|
|
4
|
+
|
|
5
|
+
### 重要约束
|
|
6
|
+
|
|
7
|
+
**重要:值对象必须有足够的业务语义和多个字段,单个字段的值对象应该直接使用原始类型**
|
|
8
|
+
|
|
9
|
+
### 值对象设计决策矩阵
|
|
10
|
+
|
|
11
|
+
| 字段数量 | 业务语义 | 推荐方案 | 说明 |
|
|
12
|
+
| ----------- | -------------------------- | ----------------------- | ---------------------------- |
|
|
13
|
+
| **1个字段** | 简单存储、标识、状态、计数 | ❌ **直接使用原始类型** | 避免为单个字段创建封装类 |
|
|
14
|
+
| **2个字段** | 相关概念组合 | ✅ **创建值对象** | 当字段之间存在业务关联时 |
|
|
15
|
+
| **3+字段** | 复杂业务概念 | ✅ **创建值对象** | 当字段组合表达完整业务含义时 |
|
|
16
|
+
|
|
17
|
+
### 禁止创建的值对象类型
|
|
18
|
+
|
|
19
|
+
- ❌ **单字段封装**:任何只包含一个字段的封装类,无论字段类型
|
|
20
|
+
- ❌ **无业务逻辑封装**:仅为了封装而封装,不包含验证规则或业务行为
|
|
21
|
+
- ❌ **业务概念封装**:CircleName、CircleDescription、CircleAvatar等单字段封装
|
|
22
|
+
|
|
23
|
+
### 推荐使用的原始类型
|
|
24
|
+
|
|
25
|
+
- **基础数据类型**:`String`、`Integer`、`Long`、`Boolean`、`BigDecimal`
|
|
26
|
+
- **时间类型**:`LocalDateTime`、`LocalDate`、`LocalTime`
|
|
27
|
+
- **集合类型**:`List<T>`、`Set<T>`、`Map<K,V>`
|
|
28
|
+
- **枚举类型**:直接使用`enum`或`Integer`、`String`表示
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Lombok使用规范
|
|
33
|
+
|
|
34
|
+
### 强制要求
|
|
35
|
+
|
|
36
|
+
**重要:所有实体类和值对象必须使用Lombok注解,禁止手动实现getter、setter、toString等方法**
|
|
37
|
+
|
|
38
|
+
### 必须使用的Lombok注解
|
|
39
|
+
|
|
40
|
+
- **@Data**:自动生成getter、setter、toString、equals、hashCode方法
|
|
41
|
+
- **@AllArgsConstructor**:生成包含所有字段的构造函数
|
|
42
|
+
- **@NoArgsConstructor**:生成无参构造函数
|
|
43
|
+
- **@Builder**:生成Builder模式(可选,用于复杂对象)
|
|
44
|
+
|
|
45
|
+
### 禁止手动实现的方法
|
|
46
|
+
|
|
47
|
+
- ❌ **getter方法**:不要手动实现getName()、getId()等方法
|
|
48
|
+
- ❌ **setter方法**:不要手动实现setName()、setId()等方法
|
|
49
|
+
- ❌ **toString方法**:不要手动实现toString()方法
|
|
50
|
+
- ❌ **equals方法**:不要手动实现equals()方法
|
|
51
|
+
- ❌ **hashCode方法**:不要手动实现hashCode()方法
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## 分层设计规范
|
|
56
|
+
|
|
57
|
+
### App层设计规范(强制要求)
|
|
58
|
+
|
|
59
|
+
**重要:App层必须设计为接口+实现类的模式,遵循依赖倒置原则**
|
|
60
|
+
|
|
61
|
+
#### App层接口设计
|
|
62
|
+
|
|
63
|
+
- **接口命名**:`{Entity}AppService`,定义业务操作接口
|
|
64
|
+
- **职责范围**:协调领域对象完成用户用例,处理事务
|
|
65
|
+
- **方法签名**:使用Thrift DTO作为参数和返回值
|
|
66
|
+
- **依赖关系**:依赖domain层接口,不依赖具体实现
|
|
67
|
+
|
|
68
|
+
#### App层实现类设计
|
|
69
|
+
|
|
70
|
+
- **实现类命名**:`{Entity}AppServiceImpl`,实现业务操作接口
|
|
71
|
+
- **注解标注**:使用`@Service`注解标记为Spring服务
|
|
72
|
+
- **依赖注入**:通过`@Resource`注入domain层服务
|
|
73
|
+
- **事务处理**:在方法级别处理事务边界
|
|
74
|
+
|
|
75
|
+
### Repository层设计规范(强制要求)
|
|
76
|
+
|
|
77
|
+
**重要:Repository层是领域对象存储的抽象,必须设计为接口+实现类模式**
|
|
78
|
+
|
|
79
|
+
#### Repository接口设计
|
|
80
|
+
|
|
81
|
+
- **接口命名**:`{Entity}Repository`,在Domain层定义
|
|
82
|
+
- **职责范围**:领域对象的存储和检索,提供领域友好的接口
|
|
83
|
+
- **方法命名**:使用业务语义命名,如`findByCircleId`、`existsByName`
|
|
84
|
+
- **返回类型**:返回领域对象或领域对象集合,不返回技术细节
|
|
85
|
+
|
|
86
|
+
#### Repository接口方法规范
|
|
87
|
+
|
|
88
|
+
- **基础CRUD**:`save`、`findById`、`deleteById`
|
|
89
|
+
- **业务查询**:`findBy{Field}`、`findBy{Field}And{Field}`、`findBy{Field}Like`
|
|
90
|
+
- **分页查询**:`findBy{Field}AndPage`、`findByPage`
|
|
91
|
+
- **统计查询**:`count`、`countBy{Field}`、`existsBy{Field}`
|
|
92
|
+
- **批量操作**:`findBy{Field}s`、`deleteBy{Field}s`
|
|
93
|
+
|
|
94
|
+
### DAO层设计规范(强制要求)
|
|
95
|
+
|
|
96
|
+
**重要:DAO层是数据访问的具体实现,负责与数据库的交互和异常处理**
|
|
97
|
+
|
|
98
|
+
#### DAO类设计
|
|
99
|
+
|
|
100
|
+
- **类命名**:`{Entity}Dao`,在Infrastructure层实现
|
|
101
|
+
- **注解标注**:使用`@Component`注解标记为Spring组件
|
|
102
|
+
- **职责范围**:数据库操作、参数校验、异常处理、日志记录
|
|
103
|
+
- **依赖关系**:依赖对应的Mapper接口,不依赖其他业务组件
|
|
104
|
+
|
|
105
|
+
#### DAO异常处理规范
|
|
106
|
+
|
|
107
|
+
- **参数校验异常**:记录warn级别日志,返回默认值
|
|
108
|
+
- **数据库异常**:记录error级别日志,返回默认值
|
|
109
|
+
- **返回值一致性**:查询方法异常返回null,删除方法异常返回false
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## Java包路径规范
|
|
114
|
+
|
|
115
|
+
### 包路径格式
|
|
116
|
+
|
|
117
|
+
**标准格式:** `com.xiaohongshu.sns.{project}.{模块}.{子层}`
|
|
118
|
+
|
|
119
|
+
### 模块划分
|
|
120
|
+
|
|
121
|
+
- **app** - 应用服务层
|
|
122
|
+
- **common** - 通用组件层
|
|
123
|
+
- **domain** - 领域层
|
|
124
|
+
- **infrastructure** - 基础设施层
|
|
125
|
+
- **start** - 启动层
|
|
126
|
+
|
|
127
|
+
### 子层职责
|
|
128
|
+
|
|
129
|
+
- **service** - 业务服务
|
|
130
|
+
- **dao** - 数据访问对象
|
|
131
|
+
- **mapper** - MyBatis映射器
|
|
132
|
+
- **model** - 数据模型
|
|
133
|
+
- **repository** - 仓储接口和实现
|
|
134
|
+
- **config** - 配置类
|
|
135
|
+
- **constant** - 常量定义
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## 常见Java错误
|
|
140
|
+
|
|
141
|
+
### 值对象设计错误
|
|
142
|
+
|
|
143
|
+
❌ **错误**:为单个字段创建封装类(如CircleName、CircleDescription)
|
|
144
|
+
✅ **正确**:单个字段直接使用原始类型(String、Integer、Long等)
|
|
145
|
+
|
|
146
|
+
**解决方案**:
|
|
147
|
+
|
|
148
|
+
```java
|
|
149
|
+
❌ 错误示例:
|
|
150
|
+
public class CircleName {
|
|
151
|
+
private String value;
|
|
152
|
+
|
|
153
|
+
public CircleName(String value) {
|
|
154
|
+
this.value = value;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
public String getValue() {
|
|
158
|
+
return value;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
✅ 正确示例:
|
|
163
|
+
public class Circle {
|
|
164
|
+
private String name; // 直接使用String类型
|
|
165
|
+
|
|
166
|
+
public Circle(String name) {
|
|
167
|
+
this.name = name;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
public String getName() {
|
|
171
|
+
return name;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### 手动实现方法错误
|
|
177
|
+
|
|
178
|
+
❌ **错误**:手动实现getter、setter、toString等方法
|
|
179
|
+
✅ **正确**:使用@Data注解自动生成这些方法
|
|
180
|
+
|
|
181
|
+
**解决方案**:
|
|
182
|
+
|
|
183
|
+
```java
|
|
184
|
+
❌ 错误示例:
|
|
185
|
+
public class Circle {
|
|
186
|
+
private String name;
|
|
187
|
+
|
|
188
|
+
public String getName() { // 错误:手动实现getter
|
|
189
|
+
return name;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
public void setName(String name) { // 错误:手动实现setter
|
|
193
|
+
this.name = name;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
@Override
|
|
197
|
+
public String toString() { // 错误:手动实现toString
|
|
198
|
+
return "Circle{name='" + name + "'}";
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
✅ 正确示例:
|
|
203
|
+
@Data
|
|
204
|
+
@AllArgsConstructor
|
|
205
|
+
@NoArgsConstructor
|
|
206
|
+
public class Circle {
|
|
207
|
+
private String name;
|
|
208
|
+
// Lombok自动生成getter、setter、toString等方法
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### 包路径不一致错误
|
|
213
|
+
|
|
214
|
+
❌ **错误**:包路径与目录结构不一致
|
|
215
|
+
✅ **正确**:包路径必须与物理目录结构完全一致
|
|
216
|
+
|
|
217
|
+
**解决方案**:
|
|
218
|
+
|
|
219
|
+
```java
|
|
220
|
+
❌ 错误示例:
|
|
221
|
+
// 文件路径:src/main/java/com/xiaohongshu/sns/demo/Circle.java
|
|
222
|
+
package com.xiaohongshu.sns.circle; // 错误:包路径与目录不一致
|
|
223
|
+
|
|
224
|
+
✅ 正确示例:
|
|
225
|
+
// 文件路径:src/main/java/com/xiaohongshu/sns/demo/Circle.java
|
|
226
|
+
package com.xiaohongshu.sns.demo; // 正确:包路径与目录一致
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### 模块选择错误
|
|
230
|
+
|
|
231
|
+
❌ **错误**:在错误的模块下生成代码
|
|
232
|
+
✅ **正确**:必须根据业务逻辑选择正确的模块
|
|
233
|
+
|
|
234
|
+
**解决方案**:
|
|
235
|
+
|
|
236
|
+
```bash
|
|
237
|
+
❌ 错误示例:
|
|
238
|
+
# 在common模块下生成业务逻辑代码
|
|
239
|
+
common/src/main/java/com/xiaohongshu/sns/demo/service/CircleService.java
|
|
240
|
+
|
|
241
|
+
✅ 正确示例:
|
|
242
|
+
# 在app模块下生成业务逻辑代码
|
|
243
|
+
app/src/main/java/com/xiaohongshu/sns/demo/service/CircleService.java
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## 文件操作规范
|
|
249
|
+
|
|
250
|
+
### Java项目目录结构规范(强制要求)
|
|
251
|
+
|
|
252
|
+
**重要:源代码必须放在正确的src目录下,绝对禁止在target目录下生成代码**
|
|
253
|
+
|
|
254
|
+
#### 正确的目录结构
|
|
255
|
+
|
|
256
|
+
```
|
|
257
|
+
{project}/
|
|
258
|
+
├── {module}/
|
|
259
|
+
│ ├── src/
|
|
260
|
+
│ │ ├── main/
|
|
261
|
+
│ │ │ ├── java/ ← ✅ 源代码目录
|
|
262
|
+
│ │ │ └── resources/ ← ✅ 资源文件目录
|
|
263
|
+
│ │ └── test/
|
|
264
|
+
│ │ └── java/ ← ✅ 测试代码目录
|
|
265
|
+
│ └── target/ ← ❌ 禁止在此目录生成代码
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
#### 源代码生成位置规范
|
|
269
|
+
|
|
270
|
+
| 文件类型 | 正确位置 | 错误位置 |
|
|
271
|
+
| -------------- | ---------------------------- | ------------ |
|
|
272
|
+
| **Java类文件** | `src/main/java/` | ❌ `target/` |
|
|
273
|
+
| **Mapper.xml** | `src/main/resources/mapper/` | ❌ `target/` |
|
|
274
|
+
| **SQL文件** | `src/main/resources/sql/` | ❌ `target/` |
|
|
275
|
+
| **配置文件** | `src/main/resources/` | ❌ `target/` |
|
|
276
|
+
| **测试文件** | `src/test/java/` | ❌ `target/` |
|
|
277
|
+
|
|
278
|
+
### 路径规范
|
|
279
|
+
|
|
280
|
+
- **绝对路径优先**:所有文件操作使用绝对路径
|
|
281
|
+
- **路径一致性**:确保不同工具的路径参数指向同一物理文件
|
|
282
|
+
- **src目录优先**:Java源代码必须放在src目录下
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
## 质量检查清单
|
|
287
|
+
|
|
288
|
+
### Java开发检查
|
|
289
|
+
|
|
290
|
+
- [ ] 值对象设计是否合理?(避免单字段无意义封装)
|
|
291
|
+
- [ ] 是否优先使用原始类型而非过度封装?
|
|
292
|
+
- [ ] 是否使用了@Data注解而非手动实现方法?
|
|
293
|
+
- [ ] 是否避免了CircleName、CircleDescription等单字段封装?
|
|
294
|
+
- [ ] App层是否设计为接口+实现类模式?
|
|
295
|
+
- [ ] App层实现类是否使用@Service注解?
|
|
296
|
+
- [ ] Repository层是否设计为接口+实现类模式?
|
|
297
|
+
- [ ] Repository接口是否在Domain层定义?
|
|
298
|
+
- [ ] DAO层是否使用@Component注解?
|
|
299
|
+
- [ ] DAO层是否包含完整的异常处理?
|
|
300
|
+
- [ ] 包路径是否与目录结构一致?
|
|
301
|
+
- [ ] 是否在正确的模块下生成代码?
|
|
302
|
+
|
|
303
|
+
### 文件操作检查
|
|
304
|
+
|
|
305
|
+
- [ ] 是否遵守了文件路径规范?
|
|
306
|
+
- [ ] Java代码是否放在正确的src目录下?
|
|
307
|
+
- [ ] 是否避开了target目录?
|
|
308
|
+
- [ ] 包路径是否与目录结构一致?
|