- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在开发一个 Java Web 应用程序,该应用程序使用 Spring 进行依赖项注入(inject),并使用 JMock 在我们的单元测试中模拟这些依赖项。
目前,我们的团队在如何命名我们使用的某些接口(interface)方面存在一些不同的意见。我们对域中具有多个实现的接口(interface)命名没有问题,这很简单。但是,当涉及到我们只有一种实现并且打算在未来只有一种实现的接口(interface)时,我们遇到了障碍。
我们有这样的接口(interface)纯粹是为了模拟,例如,我们有我们在单元测试中模拟出来的服务和存储库,这些服务将被命名为“DocumentMappingService”或存储库“EmployeeRepository”。目前,有些人只是在关联的接口(interface)名称前加上“I”,即“IDocumentMappingService”和“IEmployeeRepository”。其他人像我上面那样命名接口(interface),然后在实现类的接口(interface)名称后附加一个“Impl”。
第三个“派系”觉得这两个选项都很差。查看诸如著名的“Growing object-oriented software,guided by testing”之类的文献会让人相信前面提到的两个选项都很糟糕,接口(interface)名称应该清楚地定义契约和实现类名称应明确说明该契约(Contract)是如何实现的。不过,在我上面提到的情况下,我们发现这很难做到。
我希望那里有人以前遇到过类似的问题,并且对哪个选项最好以及为什么有一些建议。另外,如果您认为“I”和“Impl”选项都很差,那么请提出一个具体的替代约定。
最佳答案
这里没有“一个”正确答案。命名是相当主观的,但最重要的是它应该在整个代码库中一致。我只想为您添加(@fge 的回答)更多选项:
使接口(interface)更通用。
EmployeeRepository implements Repository
DocumentMappingService implements MappingService
调用你的单个实现“defaults”。
DefaultEmployeeRepository implements EmployeeRepository
DefaultDocumentMappingService implements DocumentMappingService
将您的基本实现(如果,有时是扩展)称为“支持”。
EmployeeRepositorySupport implements EmployeeRepository
DocumentMappingServiceSupport implements DocumentMappingService
我在使用 Spring 框架 时经常遇到这些命名约定。
nyxz
对
-Base
的评论或
Base-
正如我之前所说,命名是主观的,使用 Base
并没有错。命名法之类的。但是,就个人而言,我不喜欢使用它。原因如下:
如果您的实现主要是直接使用,那么实例化类的代码会留下破坏 OOP 层次结构的印象。那也许应该实例化一个特定的派生类。
如果您的实现主要是从扩展而来,那么 Base
这个词在某种程度上变得多余。您是从它扩展而来的,所以当然,它是一个基类。呵呵!
第 2 点主要适用于项目中的外围类。您在发布要在其他项目中使用和扩展的框架或库时提供的扩展点。
另一方面,使用 Base
的一个很好的用例术语将适用于框架内部的类,这些类将通用功能排除在其他外围类之外。由于这些类不应该被直接实例化,它们被标记为 abstract
,符合第1点。
这里是 Adapter
以 Android 框架的层次结构为例:
接口(interface)层次结构。
public interface Adapter
public interface ListAdapter extends Adapter
public interface SpinnerAdapter extends Adapter
abstract
Base
分解出常见行为和接口(interface)实现的类。
public abstract class BaseAdapter implements ListAdapter, SpinnerAdapter
大部分实例化但有时由 Android 应用程序扩展的外围类。
public class SimpleAdapter extends BaseAdapter implements Filterable
public class ArrayAdapter<T> extends BaseAdapter implements Filterable
关于Java 接口(interface)命名约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17275344/
我正在尝试在我的代码库中为我正在编写的游戏服务器更多地使用接口(interface),并了解高级概念以及何时应该使用接口(interface)(我认为)。在我的例子中,我使用它们将我的包相互分离,并使
我有一个名为 Widget 的接口(interface),它在我的整个项目中都在使用。但是,它也用作名为 Widget 的组件的 Prop 。 处理此问题的最佳方法是什么?我应该更改我的 Widget
有一个接口(interface)可以是多个接口(interface)之一 interface a {x:string} interface b {y:string} interface c {z:st
我遇到了一种情况,我需要调用第三方服务来获取一些信息。这些服务对于不同的客户可能会有所不同。我的界面中有一个身份验证功能,如下所示。 interface IServiceProvider { bool
在我的例子中,“RequestHandlerProxy”是一个结构,其字段为接口(interface)“IAdapter”,接口(interface)有可能被调用的方法,该方法的输入为结构“Reque
我有一个接口(interface)Interface1,它已由类A实现,并且设置了一些私有(private)变量值,并且我将类A的对象发送到下一个接受输入作为Interface2的类。那么我怎样才能将
假设我有这样的类和接口(interface)结构: interface IService {} interface IEmailService : IService { Task SendAs
有人知道我在哪里可以找到 XML-RPC 接口(interface)的定义(在 OpenERP 7 中)?我想知道创建或获取对象需要哪些参数和对象属性。每个元素的 XML 示例也将非常有帮助。 最佳答
最近,我一直在阅读有关接口(interface)是抽象的错误概念的文章。一篇这样的帖子是http://blog.ploeh.dk/2010/12/02/InterfacesAreNotAbstract
如果我有一个由第三方实现的现有 IInterface 后代,并且我想添加辅助例程,Delphi 是否提供了任何简单的方法来实现此目的,而无需手动重定向每个接口(interface)方法?也就是说,给定
我正在尝试将 Article 数组分配给我的 Mongoose 文档,但 Typescript 似乎不喜欢这样,我不知道为什么它显示此警告/错误,表明它不可分配. 我的 Mongoose 模式和接口(
我有两个接口(interface): public interface IController { void doSomething(IEntity thing); } public inte
是否可以创建一个扩展 Serializable 接口(interface)的接口(interface)? 如果是,那么扩展接口(interface)的行为是否会像 Serilizable 接口(int
我试图在两个存储之间创建一个中间层,它从存储 A 中获取数据,将其转换为相应类型的存储 B,然后存储它。由于我需要转换大约 50-100 种类型,我希望使用 map[string]func 并根据 s
我正在处理一个要求,其中我收到一个 JSON 对象,其中包含一个日期值作为字符串。我的任务是将 Date 对象存储在数据库中。 这种东西: {"start_date": "2019-05-29", "
我们的方法的目标是为我们现有的 DAO 和模型类引入接口(interface)。模型类由各种类型的资源 ID 标识,资源 ID 不仅仅是随机数,还带有语义和行为。因此,我们必须用对象而不是原始类型来表
Collection 接口(interface)有多个方法。 List 接口(interface)扩展了 Collection 接口(interface)。它声明与 Collection 接口(int
我有一个 Java 服务器应用程序,它使用 Jackson 使用反射 API 对 DTO 进行一般序列化。例如对于这个 DTO 接口(interface): package com.acme.libr
如果我在 Kotlin 中有一个接口(interface): interface KotlinInterface { val id: String } 我可以这样实现: class MyCla
我知道Java中所有访问修饰符之间的区别。然而,有人问了我一个非常有趣的问题,我很难找到答案:Java 中的 private 接口(interface)和 public 接口(interface)有什
我是一名优秀的程序员,十分优秀!