为了账号安全,请及时绑定邮箱和手机立即绑定

Java接口/实现命名约定

Java接口/实现命名约定

噜噜哒 2019-11-21 10:45:48
您如何命名创建的不同类/接口?有时我没有实现信息要添加到实现名称中,例如接口FileHandler和类SqlFileHandler。发生这种情况时,我通常使用“普通”名称来命名接口,例如Truck并命名实际的类TruckClass。您在这方面如何命名接口和类?
查看完整描述

3 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

我在这里看到的答案表明,如果只有一种实现,则不需要接口。这与“依赖注入/控制反转”原理相违背(不要打电话给我们,我们会打电话给您!)。

所以是的,在某些情况下,您希望简化代码,并依靠注入的接口实现轻松地对其进行测试(这也可能是代理的-您的代码不知道!)。即使您只有两种实现-一种用于测试的Mock,另一种被注入到实际的生产代码中-这也不会使接口变得多余。记录良好的界面可建立合同,也可以通过严格的模拟实施进行维护以进行测试。

实际上,您可以使用更有效的生产代码实现(不检查应作为参数的参数)来建立测试,以使模拟程序执行最严格的接口协定(对不应为null的参数抛出异常等)并捕获测试中的错误。不为null表示为null,因为模拟在测试中引发了异常,并且您知道参数不为null(例如,由于在这些测试之后修复了代码)。

对于新手来说,依赖注入/ IOC可能很难掌握,但是一旦您了解了它的潜力,便会想在各处使用它,并且会发现自己一直在建立接口-即使只有一个(实际生产)实施。

对于这一实现(您可以推断,并且您是对的,我相信测试用的模拟应该称为Mock(InterfaceName)),我更喜欢使用Default(InterfaceName)这个名称。如果出现更具体的实现,则可以适当地命名。这也避免了我特别不喜欢的Impl后缀(如果它不是一个抽象类,当然,它是一个“ impl”!)。

我还更喜欢“ Base(InterfaceName)”而不是“ Abstract(InterfaceName)”,因为在某些情况下,您希望基类在以后可实例化,但是现在您的名称仍然是“ Abstract(InterfaceName)” ,这会迫使您重命名该类,可能会引起一些小的混乱-但是,如果始终为Base(InterfaceName),则删除abstract修饰符不会更改该类的名称。


查看完整回答
反对 回复 2019-11-21
?
翻阅古今

TA贡献1780条经验 获得超5个赞

我倾向于遵循Java Core / Sun建立的伪约定,例如在Collections类中:

  • List -“概念”对象的接口

  • ArrayList -接口的具体实现

  • LinkedList -接口的具体实现

  • AbstractList -抽象的“部分”实现,以协助自定义实现

在AWT Event / Listener / Adapter范例之后,我曾经做过相同的事情来为事件类建模。


查看完整回答
反对 回复 2019-11-21
  • 3 回答
  • 0 关注
  • 952 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信