最近,我一直在使用很多策略模式和工厂模式。我真的很吝啬。对于根据参数检索算法的所有事物和工厂,我有很多“算法”。 即使代码看起来非常具有可扩展性,但是,有N个工厂似乎有点滥用。
我知道这是非常主观的,我们在没有看到代码的情况下谈论,但这在现实代码中是否可以接受?你会改变什么吗?
答案 0 :(得分:3)
好的 - 问自己一个问题。这种算法实现会改变吗?如果否,则删除策略。
答案 1 :(得分:2)
我 am 维持。
我曾经被迫(通过我的模式lovin'老板)使用AbstractFactory和C ++中的双DAO模式编写了一组16“缓冲区解释器tuxedo服务”(没有反射,没有代码生成)。总而言之,就像我见过的那些 nastiest 代码的20,000行一样(至少因为我在开始时并不真正了解C ++)并且花了大约三个月。
自从我的老板继续前进以来,我已经使用好的'ole'直接上下“程序化风格C ++重写了它们,有几个时髦宏......每个服务就像60行代码,时间16。 ..所有不到1000行的真正 SIMPLE 代码;如此简单,即使我可以遵循它。
干杯。基思。
答案 2 :(得分:1)
每当我以这种方式实现代码时,我问的一些问题是:
这一切都驱动我如何构建对象或组件(通过工厂)以及如何实现算法。以上是模糊的,但(当然)要求同样难以确定。在没有看到您的实施和您的要求的情况下,我无法进一步发表评论,但上述内容应作为一些指导原则来帮助您确定您所做的事情是否过度。
答案 3 :(得分:1)
如果你在整个地方使用相同的设计模式,也许你应该切换到一种语言,这种语言可以更好地支持你想要做的事情,或者重新考虑你的代码,用你选择的语言更加惯用。毕竟,这就是为什么我们有多种编程语言。
答案 4 :(得分:1)
你不能把AbstractFactory改成不同的独立工厂吗?
AlgorithmFactory根据具体工厂创建您需要的算法。
答案 5 :(得分:1)
取决于我正在处理的软件类型。
维护要求简单的代码,工厂不是简单的代码。
但可扩展性有时会要求工厂......
所以你必须考虑两者。
请记住,大多数情况下,您必须每年多次维护源文件,而不必延长它。
IMO,模式只应在绝对需要时使用。如果您认为它可以在两年内使用,那么最好在两年内使用它们。
答案 6 :(得分:1)
工厂处理的工作有多复杂?对象创建是否真的需要抽象到不同的类?工厂方法的一种变体是拥有一个简单的同类工厂。如果已经注入任何依赖项,这确实最有效。
例如,
public class Customer
{
public Customer CreateNewCustomer()
{
// handle minimally complex create logic here
}
}
至于战略过度使用......再次,正如@RichardOD解释的那样,算法真的会改变吗?
始终牢记YAGNI原则。你不需要它。