寻找重构大型 class 的最佳方法
Looking for best way to refactor a large class
我有一种情况,前任创建了一个 class,它旨在处理添加到数据库中的 Note 实体的创建,以记录系统在整个站点上执行的操作。
目前,此 class 已分解为几个 CreateXYZNote 方法,这些方法采用表示特定笔记类型的枚举,以及驱动该站点区域的模型实例。
我的问题是,笔记的种类太多了,每一种都只在整个系统的一两个地方使用。每个方法都非常庞大,由少量通用代码组成,细节(例如笔记的文本内容)保存在一系列基于枚举的 switch 语句中。很难找到与特定笔记相关的代码,目前很难维护,而且随着时间的推移,随着新类型的笔记进入系统,它只会增长。
有没有人有任何建议或模式可以帮助解决这种情况?
我能想到的最简单的解决方案是,我在此 class 之外保存了一组配置文件作为字典(以枚举值作为键)定义标题、描述、类别等。笔记,然后这个 class 就变成了查找这些值和创建笔记的一种方式,但感觉就像我把问题转移到另一个地方而不是解决它。
您可以使用具有 INote Create(NoteType type)
方法的 NoteFactory
。工厂可以依赖工厂用来查找的 NoteType
和 return 合适的 Note
键控的字典。这样您就可以避免使用非 OCP switch
语句。
工厂可以注入字典,使用 IoC 容器在这里有帮助,或者您可以在构造函数中创建字典。
我有一种情况,前任创建了一个 class,它旨在处理添加到数据库中的 Note 实体的创建,以记录系统在整个站点上执行的操作。
目前,此 class 已分解为几个 CreateXYZNote 方法,这些方法采用表示特定笔记类型的枚举,以及驱动该站点区域的模型实例。
我的问题是,笔记的种类太多了,每一种都只在整个系统的一两个地方使用。每个方法都非常庞大,由少量通用代码组成,细节(例如笔记的文本内容)保存在一系列基于枚举的 switch 语句中。很难找到与特定笔记相关的代码,目前很难维护,而且随着时间的推移,随着新类型的笔记进入系统,它只会增长。
有没有人有任何建议或模式可以帮助解决这种情况?
我能想到的最简单的解决方案是,我在此 class 之外保存了一组配置文件作为字典(以枚举值作为键)定义标题、描述、类别等。笔记,然后这个 class 就变成了查找这些值和创建笔记的一种方式,但感觉就像我把问题转移到另一个地方而不是解决它。
您可以使用具有 INote Create(NoteType type)
方法的 NoteFactory
。工厂可以依赖工厂用来查找的 NoteType
和 return 合适的 Note
键控的字典。这样您就可以避免使用非 OCP switch
语句。
工厂可以注入字典,使用 IoC 容器在这里有帮助,或者您可以在构造函数中创建字典。