1
17
Spring本身提供接口通用名,然后根据实现的细节命名类。这是一个考虑到的例子:
我不认为simpleuseraccountmanager或useraccountdbmanager这样的名字是愚蠢的,因为它们传达了一些关于管理器/服务实现的信息。 我觉得愚蠢的是在实现类中添加“impl”后缀的常见约定:
不过,有些人更喜欢这样。 |
2
52
我们使用的是:
对于实现,我们添加impl后缀(xxxserviceimpl),将其与接口区分开来,如果有多个实现,或者我们想要添加额外的信息,我们将其添加为前缀(jdbcxxxdaoimpl、googlemapsgeocodingserviceimpl等)。类名称在这种方式下会变得有点长,但是它们非常具有描述性和自记录性。 |
3
7
对于您给出的示例,我将使用反映 怎样 类执行操作,如HibernateUserAccountManager、JPauserAccountManager或JDBCUserAccountManager等,或者可能仅执行UserAccountManagerDao。 |
4
4
显然,类名以manager或service结尾本身并不重要。重要的是,一般来说,名字准确地表达了被建模的东西。这就是问题的关键:“服务”或“管理者”不是我们在软件对象中尝试模型的真实对象。相反,它们是我们收集一系列方法的地方,这些方法做的事情根本不符合我们的任何对象的职责。 做 需要/想要建模。 我个人更喜欢“服务”,但仅仅是因为“管理者”看起来像是一个可以实际建模的东西,也就是说,我们的“-manager”对象可能代表现实世界中的管理者。但这一点完全是学术性的,我立即承认,它没有任何实际意义。 真正重要的通常远比这些细枝末节更为基础:拥有一个被所有参与开发的人都很好理解的模型。如果说我的经历有什么可借鉴的,那就很少了。因此,我建议那些问“经理”或“服务”是否是正确的比喻的人:抛开一枚硬币,确保每个人都了解会议,花时间思考和讨论重要的事情! |
5
3
我觉得 服务 VS 经理 命名后缀只是一个首选项。唯一一次“服务”给我们带来混乱的是,我们的服务层上也有Web服务。在一些项目中,我们只是将Web服务类称为代理,因为它们所做的只是将Web服务调用转换或代理为对我们的服务层的调用。 我同意Kgiannakaki的观点,用“impl”覆盖您的实现不是一个好方法。我也遇到过编写最佳实践的方法,它们没有提到要这样做。在抽象之后命名接口是公认的最佳实践。正如Kgianakakis所建议的那样,在接口后用其用途或类型的一些指示器命名实现类似乎是一种普遍接受的方法。 当我们有基于Web服务的DAO和基于ORM的DAO时,我们使用包和类名来区分实现类与其接口以及彼此之间的区别。我认为将实现放在不同的包中取决于包中有多少个类,它们的实现方式有多不同,以及您希望将内容拆分的程度。 |
6
2
还可以命名接口iuseraccountmanager(例如,该约定用于EclipseRCP),然后使用useraccountmanager进行默认实现。 |
7
2
对我来说,服务类是关于实现用例的,所以我根据服务代表的用户类型来命名它。因此,如果我有一个具有不同角色的应用程序,比如客户、订单完成人员、数据输入人员和管理员,那么我可能会有一个客户服务、订单完成服务、数据输入服务和管理服务。我认为根据获取或旋转的数据类型来命名服务是一种反模式。因此,假设用户帐户操作是管理员的领域,我可能会称之为“管理员服务”。 |
8
1
与经理和服务之间的差异相关: 我会说,尽可能长时间地使用一个层作为业务逻辑(服务层或管理层)。 一旦这一层变得复杂(假设您使用了服务),您就可以添加负责委派给一个或另一个服务的管理者,但将业务逻辑保留在服务中。 因此,我将保持服务简单,使用管理器来管理服务,并将业务逻辑保持在服务内部。 我也同意避免 实现的impl后缀并避免 接口后缀。例如,将接口命名为“controller”,将实现命名为“simplecontroller”或“usercontroller”对我来说更合适。 |
9
1
假设这些是针对REST服务的,我认为您的URI命名约定比底层实现服务的名称更重要,因为后者在很大程度上对客户机是不可见的。当然,您希望在内部保持一致的命名,但这并不是那么重要。 我们使用的一些休息指南: http://soaprobe.blogspot.co.uk/2012/10/soa-rest-service-naming-guideline.html (我的博客) |