gpt4 book ai didi

Java 接口(interface)命名约定

转载 作者:IT老高 更新时间:2023-10-28 20:27:46 28 4
gpt4 key购买 nike

我正在开发一个 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 并没有错。命名法之类的。但是,就个人而言,我不喜欢使用它。原因如下:

  1. 如果您的实现主要是直接使用,那么实例化类的代码会留下破坏 OOP 层次结构的印象。那也许应该实例化一个特定的派生类。

  2. 如果您的实现主要是从扩展而来,那么 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com