4.1 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	
			4.1 KiB
		
	
	
	
	
	
	
	
计划服务重构设计方案
1. 目标
将 internal/domain/scheduler 包重构为 internal/domain/plan,并创建一个新的 PlanService 对象,将原 scheduler 包中的核心调度逻辑集成到 PlanService 中作为一个子服务,统一由 PlanService 对外提供服务。此重构旨在提高代码的模块化、可维护性和可测试性,并为后续的“设备删除前校验”功能奠定基础。
2. 方案详情
2.1. 包重命名
- 将 
internal/domain/scheduler目录重命名为internal/domain/plan。 - 修改 
internal/domain/plan目录下所有 Go 文件中的package scheduler为package plan。 - 更新 
internal/domain/plan目录下所有 Go 文件中所有引用git.huangwc.com/pig/pig-farm-controller/internal/domain/scheduler的导入路径为git.huangwc.com/pig/pig-farm-controller/internal/domain/plan。 
2.2. internal/domain/plan 包内部结构调整
- 
internal/domain/plan/task.go:- 保持不变。它定义了任务的接口和工厂,是领域内的核心抽象。
 
 - 
internal/domain/plan/scheduler.go:- 将 
Scheduler结构体更名为PlanExecutionManager。这个名称更准确地反映了它作为计划任务执行的协调者和管理者的角色。 - 将 
NewScheduler构造函数更名为NewPlanExecutionManager。 - 文件内部所有对 
Scheduler的引用都将更新为PlanExecutionManager。 
 - 将 
 - 
internal/domain/plan/analysis_plan_task_manager.go:- 保持不变。其名称 
AnalysisPlanTaskManager已经清晰地表达了其职责。 
 - 保持不变。其名称 
 
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进行。 
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来访问计划相关的逻辑,而不是直接访问底层的管理器。 
 - 在初始化阶段,我们将创建 
 
3. 优势
- 职责分离清晰: 
internal/domain/plan包专注于计划领域的核心逻辑和管理,而internal/app/service包则负责应用层的业务编排和对外接口。 - 符合领域驱动设计: 领域层包含核心业务逻辑和管理器,应用层作为领域层的协调者。
 - 与现有项目风格一致: 借鉴 
domain/pig包的模式,提高了项目内部的一致性。 - 可测试性增强: 
PlanService可以更容易地进行单元测试,因为其依赖的管理器可以被模拟。 - 可维护性提高: 当计划相关的业务逻辑发生变化时,可以更精确地定位到需要修改的组件。
 
4. 验证和测试
在完成所有修改后,需要运行项目并进行测试,确保调度器功能正常,没有引入新的错误。