Java接口/实现命名约定

您如何命名创建的不同类/接口?有时我没有实现信息要添加到实现名称中,例如接口FileHandler和类SqlFileHandler。


发生这种情况时,我通常使用“普通”名称来命名接口,例如Truck并命名实际的类TruckClass。


您在这方面如何命名接口和类?


噜噜哒
浏览 951回答 3
3回答

慕神8447489

我在这里看到的答案表明,如果只有一种实现,则不需要接口。这与“依赖注入/控制反转”原理相违背(不要打电话给我们,我们会打电话给您!)。所以是的,在某些情况下,您希望简化代码,并依靠注入的接口实现轻松地对其进行测试(这也可能是代理的-您的代码不知道!)。即使您只有两种实现-一种用于测试的Mock,另一种被注入到实际的生产代码中-这也不会使接口变得多余。记录良好的界面可建立合同,也可以通过严格的模拟实施进行维护以进行测试。实际上,您可以使用更有效的生产代码实现(不检查应作为参数的参数)来建立测试,以使模拟程序执行最严格的接口协定(对不应为null的参数抛出异常等)并捕获测试中的错误。不为null表示为null,因为模拟在测试中引发了异常,并且您知道参数不为null(例如,由于在这些测试之后修复了代码)。对于新手来说,依赖注入/ IOC可能很难掌握,但是一旦您了解了它的潜力,便会想在各处使用它,并且会发现自己一直在建立接口-即使只有一个(实际生产)实施。对于这一实现(您可以推断,并且您是对的,我相信测试用的模拟应该称为Mock(InterfaceName)),我更喜欢使用Default(InterfaceName)这个名称。如果出现更具体的实现,则可以适当地命名。这也避免了我特别不喜欢的Impl后缀(如果它不是一个抽象类,当然,它是一个“ impl”!)。我还更喜欢“ Base(InterfaceName)”而不是“ Abstract(InterfaceName)”,因为在某些情况下,您希望基类在以后可实例化,但是现在您的名称仍然是“ Abstract(InterfaceName)” ,这会迫使您重命名该类,可能会引起一些小的混乱-但是,如果始终为Base(InterfaceName),则删除abstract修饰符不会更改该类的名称。

翻阅古今

我倾向于遵循Java Core / Sun建立的伪约定,例如在Collections类中:List -“概念”对象的接口ArrayList -接口的具体实现LinkedList -接口的具体实现AbstractList -抽象的“部分”实现,以协助自定义实现在AWT Event / Listener / Adapter范例之后,我曾经做过相同的事情来为事件类建模。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java