将设计模式名称嵌入到适当的接口中是不是一种好的做法/风格?比方说,如果它是装饰器设计模式,则将抽象装饰器命名为IDecorateInterfaceName或AbstractClassNameDecorator,如果该模式使用了抽象类。例如,java /O类使用装饰器模式,但将抽象装饰器类命名为FilterInputStream,而不是在名称中的某处添加模式名称。或者,如果提供了足够的文档,添加这种类型的信息会变得多余吗?在我看来,如果从头到尾都遵循这个约定,那么只需查看代码就可以更容易地了解使用了哪些模式,但API没有遵循这样的规则的事实让我感到困惑。
发布于 2013-04-21 03:35:05
幸运的是,语言设计者为我们提供了一些这方面的见解。
在命名类、方法和变量时,您的首要目标应该始终是提高可读性(从而向代码的读者传达实际正在做的事情)。在装饰器模式的示例中,在类的名称中包含“AbstractDecorator”是不相关的,因为这不会告诉任何人对象实际做了什么。
这实际上是基于具体情况-例如,在许多MVC框架中,将" Controller“后缀添加到作为控制器的每个类是常见的约定(根据设计模式)。在这种情况下,将设计模式添加到名称可以帮助用户理解对象正在做什么。
当有疑问时,只需问自己这个问题:“这会让我的代码更容易阅读和理解吗?”
发布于 2013-04-21 03:36:29
我的意思是,知道使用了哪种模式并不重要。重要的是类是什么和做了什么。FilterInputStream清楚地说明了这一点。它实现了装饰器模式的事实是一个实现细节,如果你知道这个模式,这很容易识别,如果你不知道,这不会增加太多的信息。
也就是说,一些模式名称清楚地描述了类是什么,比如工厂或策略,因此它们通常用作类名的一部分。例如,SecretKeyFactory是密钥的工厂,并实现工厂模式。但是我不喜欢像RuntimeSingleton或FileFilterStrategy这样的类名。这些后缀是噪声。
顺便说一句,我也讨厌C#这个接口的I前缀约定。这是同样的一种噪音,使代码的可读性更差,并且不会添加有意义的信息。
发布于 2013-04-21 03:34:58
如果您希望将您装饰器暴露给另一个应用程序,则可以使用接口,例如,基于WCF体系结构n层的开发必须是实现接口。
https://stackoverflow.com/questions/16124242
复制相似问题