服务s = new ServiceImpl() - 你为什么这样做?

Pre*_*raj 2 java interface

我刚读过这篇文章服务S =新服务时代() - 为什么你这样做?

想知道你对它的看法..想知道除了impl之外你会命名它吗?

小智 7

Impl后缀是命名反模式.它表示开发人员缺乏描述性地命名的努力Class.这也是IService界面命名反模式的另一面.这两种做法都是懒惰或设计选择不当或两者兼而有之.两者都是代码味道,应警告开发人员有些事情是不对的.

代码说interface Service并且class MyService implements Service应该足够的事实,其他任何事情都是重言式.使用当今的高级Java IDE更是如此.

如果您有Service接口,则以描述性方式命名实现.Service是通用的,对于接口来说是好的.HttpService,AuthenticationService具体哪些课程是好的.在两种情况下大部分都是自我记录.

如果您不能为接口和类提供唯一的描述性名称,那么您做错了.

Mocking论证中,假设真正的类在com.company.app.service.模拟实现应该在他们自己的com.company.app.service.mock包中,可能在与Test类不同的目录结构中,如在Maven中,这将允许它们具有与非Mock类相同的名称,并且仍然记录它们是Mocks仅用于测试,并且不会污染生产代码的名称空间,并且很容易在部署中不包含该代码.

  • @Premraj:我认为它应该是`UserHibernateService`. (3认同)
  • 或者更好的`HibernateUserService`与`UserService`接口的命名约定一致.`Impl`总是代码味道和坏形式. (2认同)