修改方案

This commit is contained in:
2025-11-02 18:20:02 +08:00
parent 011658461e
commit 408df2f09c
3 changed files with 28 additions and 21 deletions

View File

@@ -18,39 +18,47 @@
* 保持不变。它定义了任务的接口和工厂,是领域内的核心抽象。
* **`internal/domain/plan/scheduler.go`**:
* 将 `Scheduler` 结构体更名为 `PlanExecutionManager`。这个名称更准确地反映了它作为计划任务执行的协调者和管理者的角色
* 将 `NewScheduler` 构造函数更名为 `NewPlanExecutionManager`
* 文件内部所有对 `Scheduler` 的引用都将更新为 `PlanExecutionManager`
* 将 `Scheduler` 结构体更名为 `PlanExecutionManagerImpl`。这个名称更准确地反映了它作为计划任务执行的协调者和管理者的具体实现
* 将 `NewScheduler` 构造函数更名为 `NewPlanExecutionManagerImpl`
* 文件内部所有对 `Scheduler` 的引用都将更新为 `PlanExecutionManagerImpl`
* **`internal/domain/plan/analysis_plan_task_manager.go`**:
* 保持不变。其名称 `AnalysisPlanTaskManager` 已经清晰地表达了其职责
* `AnalysisPlanTaskManager` 结构体更名为 `AnalysisPlanTaskManagerImpl`
* 将 `NewAnalysisPlanTaskManager` 构造函数更名为 `NewAnalysisPlanTaskManagerImpl`
* 文件内部所有对 `AnalysisPlanTaskManager` 的引用都将更新为 `AnalysisPlanTaskManagerImpl`
* **定义接口**:
* 在 `internal/domain/plan` 包中定义 `PlanExecutionManager` 接口,包含 `PlanExecutionManagerImpl` 对外暴露的所有公共方法。
* 在 `internal/domain/plan` 包中定义 `AnalysisPlanTaskManager` 接口,包含 `AnalysisPlanTaskManagerImpl` 对外暴露的所有公共方法。
* `PlanExecutionManagerImpl``AnalysisPlanTaskManagerImpl` 将分别实现对应的接口。
### 2.3. 创建 `internal/app/service/plan_service.go`
* 创建新文件 `internal/app/service/plan_service.go`
* 该文件将定义 `PlanService` 结构体,并包含 `*plan.PlanExecutionManager``*plan.AnalysisPlanTaskManager` 的实例作为其依赖。
* 实现 `NewPlanService` 构造函数,负责创建 `plan.PlanExecutionManager``plan.AnalysisPlanTaskManager` 实例,并将其注入到 `PlanService` 中。
* `PlanService` 将对外提供高层次的 API这些 API 会协调调用 `PlanExecutionManager``AnalysisPlanTaskManager`方法。例如:
* `PlanService.Start()` 方法会调用 `PlanExecutionManager.Start()`
* `PlanService.Stop()` 方法会调用 `PlanExecutionManager.Stop()`
* `PlanService.RefreshPlanTriggers()` 方法会调用 `AnalysisPlanTaskManager.Refresh()`
* 该文件将定义 `PlanService` 结构体,并包含 `plan.PlanExecutionManager` 接口`plan.AnalysisPlanTaskManager` 接口的实例作为其依赖。
* 实现 `NewPlanService` 构造函数,负责接收 `plan.PlanExecutionManager` 接口`plan.AnalysisPlanTaskManager` 接口的实例,并将其注入到 `PlanService` 中。
* `PlanService` 将对外提供高层次的 API这些 API 会协调调用其依赖的接口方法。例如:
* `PlanService.Start()` 方法会调用 `PlanExecutionManager` 接口的 `Start()` 方法
* `PlanService.Stop()` 方法会调用 `PlanExecutionManager` 接口的 `Stop()` 方法
* `PlanService.RefreshPlanTriggers()` 方法会调用 `AnalysisPlanTaskManager` 接口的 `Refresh()` 方法
* 未来所有与计划相关的应用层操作,都将通过 `PlanService` 进行。
### 2.4. 调整依赖注入和引用
* **查找并替换导入路径:** 使用 `grep` 命令查找整个项目中所有引用 `git.huangwc.com/pig/pig-farm-controller/internal/domain/scheduler` 的地方,并将其替换为 `git.huangwc.com/pig/pig-farm-controller/internal/domain/plan`
* **更新 `internal/core/component_initializers.go`**:
* 在初始化阶段,我们将创建 `plan.PlanExecutionManager``plan.AnalysisPlanTaskManager` 的实例。
* 然后,将这两个管理器实例注入到 `service.NewPlanService` 构造函数,创建 `PlanService` 实例。
* 应用程序的其他部分将通过 `PlanService` 来访问计划相关的逻辑,而不是直接访问底层的管理器。
* 在初始化阶段,我们将创建 `plan.PlanExecutionManagerImpl``plan.AnalysisPlanTaskManagerImpl`具体实例。
* 然后,将这些具体实例作为 `plan.PlanExecutionManager` 接口和 `plan.AnalysisPlanTaskManager` 接口类型传递给 `service.NewPlanService` 构造函数,创建 `PlanService` 实例。
* 应用程序的其他部分将通过 `PlanService` 来访问计划相关的逻辑,而不是直接访问底层的管理器或其具体实现
## 3. 优势
* **职责分离清晰:** `internal/domain/plan` 包专注于计划领域的核心逻辑和管理,而 `internal/app/service` 包则负责应用层的业务编排和对外接口。
* **符合领域驱动设计:** 领域层包含核心业务逻辑和管理器,应用层作为领域层的协调者。
* **与现有项目风格一致:** 借鉴 `domain/pig` 包的模式,提高了项目内部的一致性。
* **可测试性增强:** `PlanService` 可以更容易地进行单元测试,因为其依赖的管理器可以被模拟。
* **可测试性增强:** `PlanService` 可以更容易地进行单元测试,因为其依赖的接口可以被模拟。
* **可维护性提高:** 当计划相关的业务逻辑发生变化时,可以更精确地定位到需要修改的组件。
* **松耦合:** `PlanService` 不依赖于具体的实现,而是依赖于接口,提高了系统的灵活性和可扩展性。
## 4. 验证和测试

View File

@@ -10,6 +10,8 @@ RELAY_API.md
TODO-List.txt
config.example.yml
config.yml
design/verification-before-device-deletion/index.md
design/verification-before-device-deletion/plan_service_refactor.md
docs/docs.go
docs/swagger.json
docs/swagger.yaml
@@ -68,9 +70,9 @@ internal/domain/pig/pig_batch_service_pig_sick.go
internal/domain/pig/pig_batch_service_pig_trade.go
internal/domain/pig/pig_sick_manager.go
internal/domain/pig/pig_trade_manager.go
internal/domain/scheduler/analysis_plan_task_manager.go
internal/domain/scheduler/scheduler.go
internal/domain/scheduler/task.go
internal/domain/plan/analysis_plan_task_manager.go
internal/domain/plan/plan_execution_manager.go
internal/domain/plan/task.go
internal/domain/task/delay_task.go
internal/domain/task/full_collection_task.go
internal/domain/task/release_feed_weight_task.go
@@ -147,15 +149,12 @@ openspec/changes/archive/2025-11-01-add-plan-recovery-option/design.md
openspec/changes/archive/2025-11-01-add-plan-recovery-option/proposal.md
openspec/changes/archive/2025-11-01-add-plan-recovery-option/specs/plan-lifecycle/spec.md
openspec/changes/archive/2025-11-01-add-plan-recovery-option/tasks.md
openspec/changes/update-delete-pre-check/proposal.md
openspec/changes/update-delete-pre-check/specs/area-controller/spec.md
openspec/changes/update-delete-pre-check/specs/device-template/spec.md
openspec/changes/update-delete-pre-check/specs/device/spec.md
openspec/project.md
openspec/specs/business-logic-layering/spec.md
openspec/specs/http-server/spec.md
openspec/specs/plan-lifecycle/spec.md
package-lock.json
project_structure.txt
internal/infra/transport/lora/chirp_stack_proto/