Vas*_*sil 42 java spring spring-mvc naming-conventions
我坚持在spring应用程序中找出服务层的良好命名约定.对于服务层中的每个类,我首先编写它应该实现的接口,然后编写实际的类.例如,我有以下界面:
public interface UserAccountManager{
public void registerUser(UserAccount newUserAccount);
public void resetPassword(UserAccount userAccount);
...
}
Run Code Online (Sandbox Code Playgroud)
然后是实施类......
这里有什么问题,UserAccountManager是一个很好的实现类名称,所以我不得不给它一个愚蠢的名字,如SimpleUserAccountManager或UserAccountDbManager.你到目前为止使用了哪些约定?将实现类放在不同的包中并给它们与接口相同的名称是一个好主意吗?您还有什么想法使用以Manager结尾的名称而不是以Service结尾的名称?
Dav*_*itz 56
这是我们使用的:
对于实现,我们添加了Impl Suffix(XxxServiceImpl),以使其与接口不同,如果有多个实现或者我们想要添加其他信息,我们将其添加为前缀(JdbcXxxDaoImpl,GoogleMapsGeocodingServiceImpl等).类名称变得有点长,但它们非常具有描述性和自我记录性.
kgi*_*kis 18
Spring本身提供接口通用名称,然后根据实现的细节命名类.这是一个想到的例子:
interface: Controller
abstract classes: AbstractController, AbstractCommandController,
SimpleFormController, MultiActionController
Run Code Online (Sandbox Code Playgroud)
我不认为像SimpleUserAccountManager或UserAccountDbManager这样的名称是愚蠢的,因为它们传达了有关管理器/服务实现的一些信息.
我发现愚蠢的是在实现类中添加"Impl"后缀的通用约定:
my/package/UserAccountManager
my/package/impl/UserAccountManagerImpl
Run Code Online (Sandbox Code Playgroud)
有些人更喜欢这个.
对于您给出的示例,我将使用反映类如何执行操作的实现名称,如HibernateUserAccountManager,或JPAUserAccountManager,或JDBCUserAccountManager等,或者可能只是UserAccountManagerDAO.
类名以Manager 还是Service 结尾显然本身并不重要。一般来说,重要的是名称准确地传达了正在建模的内容。这就是问题的症结所在:“服务”或“管理器”不是我们尝试在软件对象中建模的真实世界对象。相反,它们是我们收集一堆方法的地方,这些方法做的事情根本不适合我们确实需要/想要建模的任何对象的职责。
就我个人而言,我更喜欢“服务”,但仅仅是因为“管理器”似乎是可以实际建模的东西,即我们的“-manager”对象可能代表现实世界的管理器。但这一点完全是学术性的,我立即承认它没有任何实际区别。
真正重要的通常比这些细节要基本得多:拥有一个所有参与开发的人都能很好地理解的模型。如果我的经验是可以借鉴的,那么这种情况很少发生。因此,对于那些询问“经理”或“服务”是否是正确比喻的人,我的提示是:掷硬币,确保每个人都了解公约,并花时间思考和讨论重要的问题!
| 归档时间: |
|
| 查看次数: |
35331 次 |
| 最近记录: |