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