<aside> 👉🏼 :
过度设计通常体现在以下几个方面:
症状: 过多的接口和抽象类,导致理解和维护变得复杂。
建议: 保持代码的简洁和清晰,避免不必要的抽象。如果某个类或接口在短期内不太可能被重用或扩展,可以考虑简化设计。
症状: 为未来可能遇到的问题做过多的设计和优化,导致代码复杂度增加。
建议: 遵循YAGNI(You Ain't Gonna Need It)原则,只为当前的需求编写代码。等到实际需要时再进行优化和扩展。
症状: 为了使用设计模式而使用设计模式,而不是解决实际问题。
建议: 设计模式是解决常见问题的工具,不是目标。确保每个设计模式的使用都有明确的目的,并且简化代码结构。
总的来说,你的代码设计是合理且清晰的,没有明显的过度设计问题。保持对设计模式的理解和实际应用,继续关注代码的简洁性和可维护性,你的代码质量会不断提升。如果你发现某些部分变得过于复杂,可以回头看看是否有简化的空间,并根据实际需求进行调整。
</aside>
classDiagram
class AbstractModelSplitterTemplate~T~ {
<<abstract>>
- JobRepository jobRepository
- SplitConfigProvider~T~ splitConfigProvider
- BizTypeEnum bizTypeEnum
+ doSplit(T modelSplitParam)
+ setSplitConfigProvider(SplitConfigProvider~T~ splitConfigProvider)
# getJobParam(T modelSplitParam) : BaseInputParam
}
class RegionModelSplitter {
+ switchSplitConfigProvider(SplitConfigProvider~ModelSplitSaveOrUpdateReqDTO~ newProvider)
}
class SplitConfigProvider~T~ {
<<interface>>
+ getConfig(T modelSplitParam) : String
}
class RegionSplitConfigProvider {
+ getConfig(ModelSplitSaveOrUpdateReqDTO modelSplitParam) : String
}
class BlockSplitConfigProvider {
+ getConfig(ModelSplitSaveOrUpdateReqDTO modelSplitParam) : String
}
class JobRepository {
}
class ModelSplitter~T~ {
<<interface>>
}
class ModelSplitParam {
}
class ModelSplitSaveOrUpdateReqDTO {
}
class BizTypeEnum {
}
AbstractModelSplitterTemplate~T~ --> SplitConfigProvider~T~
AbstractModelSplitterTemplate~T~ --> JobRepository
AbstractModelSplitterTemplate~T~ --> BizTypeEnum
AbstractModelSplitterTemplate~T~ ..|> ModelSplitter~T~
RegionModelSplitter --> SplitConfigProvider~ModelSplitSaveOrUpdateReqDTO~
RegionModelSplitter --> ModelSplitSaveOrUpdateReqDTO
SplitConfigProvider~T~ <|.. RegionSplitConfigProvider
SplitConfigProvider~T~ <|.. BlockSplitConfigProvider
RegionModelSplitter ..|> AbstractModelSplitterTemplate~ModelSplitSaveOrUpdateReqDTO~
ModelSplitter~T~ --> ModelSplitParam
// Abstract Model Splitter Template Class
@RequiredArgsConstructor
public abstract class AbstractModelSplitterTemplate<T extends ModelSplitParam> implements ModelSplitter<T> {
protected final JobRepository jobRepository;
protected SplitConfigProvider<T> splitConfigProvider;
protected final BizTypeEnum bizTypeEnum;
@Override
public void doSplit(T modelSplitParam) {
BaseInputParam jobParam = getJobParam(modelSplitParam);
jobRepository.createJob(
modelSplitParam.getTargetId(),
bizTypeEnum,
jobParam);
}
protected BaseInputParam getJobParam(T modelSplitParam) {
BaseInputParam jobParam = new BaseInputParam();
jobParam.setAppId(RequestContextUtil.getAppId());
jobParam.setMainProjectId(HeadTool.getPortalId());
jobParam.setProjectId(modelSplitParam.getProjectId());
jobParam.setTenantId(modelSplitParam.getTenantId());
jobParam.setExtParam(splitConfigProvider.getConfig(modelSplitParam));
return jobParam;
}
public void setSplitConfigProvider(SplitConfigProvider<T> splitConfigProvider) {
this.splitConfigProvider = splitConfigProvider;
}
}
// Region Model Splitter Class
@Service
public class RegionModelSplitter extends AbstractModelSplitterTemplate<ModelSplitSaveOrUpdateReqDTO> {
public RegionModelSplitter(JobRepository jobRepository, RegionSplitConfigProvider splitConfigProvider) {
super(jobRepository, splitConfigProvider, BizTypeEnum.REGION_SPLIT);
}
// Method to switch Split Config Provider
public void switchSplitConfigProvider(SplitConfigProvider<ModelSplitSaveOrUpdateReqDTO> newProvider) {
setSplitConfigProvider(newProvider);
}
}
// SplitConfigProvider Interface
public interface SplitConfigProvider<T extends ModelSplitParam> {
String getConfig(T modelSplitParam);
}
// Region Split Config Provider Implementation
public class RegionSplitConfigProvider implements SplitConfigProvider<ModelSplitSaveOrUpdateReqDTO> {
@Override
public String getConfig(ModelSplitSaveOrUpdateReqDTO modelSplitParam) {
return "RegionConfig";
}
}
// Block Split Config Provider Implementation
public class BlockSplitConfigProvider implements SplitConfigProvider<ModelSplitSaveOrUpdateReqDTO> {
@Override
public String getConfig(ModelSplitSaveOrUpdateReqDTO modelSplitParam) {
return "BlockConfig";
}
}