Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 如何使单一责任原则在我的策略课上发挥作用?_Design Patterns_Strategy Pattern_Single Responsibility Principle - Fatal编程技术网

Design patterns 如何使单一责任原则在我的策略课上发挥作用?

Design patterns 如何使单一责任原则在我的策略课上发挥作用?,design-patterns,strategy-pattern,single-responsibility-principle,Design Patterns,Strategy Pattern,Single Responsibility Principle,我如何让我的“复杂”策略课程实现单一责任原则?有没有其他模式可以替代 我曾考虑过可以为我的“算法”添加更多责任/操作的装饰器模式,但它似乎并不适合 请参见此SimpleStrategy类。它获取缓存的记录和最新记录,比较它们并在需要时进行更新,然后执行任何后期处理 类SimpleStrategy{ 私有DbRecordFetcher DbRecordFetcher; 私人LatestRecordFetcher LatestRecordFetcher; 专用记录比较器记录比较器; 私有数据更新程序

我如何让我的“复杂”策略课程实现单一责任原则?有没有其他模式可以替代

我曾考虑过可以为我的“算法”添加更多责任/操作的装饰器模式,但它似乎并不适合

请参见此
SimpleStrategy
类。它获取缓存的记录和最新记录,比较它们并在需要时进行更新,然后执行任何后期处理

类SimpleStrategy{
私有DbRecordFetcher DbRecordFetcher;
私人LatestRecordFetcher LatestRecordFetcher;
专用记录比较器记录比较器;
私有数据更新程序;
专用后处理器;
公共作废流程(输入){
I cached=dbRecordFetcher.fetch(输入);
I latest=latestRecordFetcher.fetch(输入);
布尔值isChanged=recordComparator.compare(缓存,最新);
如果(已更改){
dataUpdater.update(输入,最新);
}
后处理器。处理(输入,最新);
}
}
SimpleStrategy
组成的所有类都是接口,因此我可以注入不同的实现,例如,获取数据库和最新记录


如何重构它以使其遵循SRP?

在某个时候,您必须执行类似的操作,但您无法绕过它。在你开始创作东西之前,你只能有这么多低层次的构建块。我并不是说你已经达到了这一点(尽管你可能已经做到了),但是对于我来说,拥有像一堆接口之间的粘合剂一样的类并只做这项工作并不少见,这在你上面所写的内容中并不少见。如果这个类有一个有效地包含6行代码的方法,那么对我来说这似乎是非常小的。这也是我的理解,所以在我认为这是必要的之前,我会和社区核实一下。为什么你认为这个代码违反了?我的理解是一个方法或一个类只做一件事,做对了。在阅读了您提供的链接的更多详细信息后,我的问题似乎是关注点分离。