2

随着我的项目规模越来越大,我觉得应该对具有相似功能的类名进行约定。

假设有三个具有相似功能的数据处理程序,唯一的区别是它们处理的数据类型。

有接口DataHandler

interface DataHandler

共有三种不同类型的数据,位图、视频和声音。

哪个选项是更广泛使用的命名约定?

选项1。

class BitmapHandler

class VideoHandler

class SoundHandler

选项 2。

class DataHandlerBitmap

class DataHandlerVideo

class DataHandlerSound

我目前正在使用选项 1,因为它听起来更好,但我认为使用选项 2 也有优势,尤其是项目规模很大。我可以通过按字母顺序对类名进行排序来轻松检查存在多少数据处理程序,并且它还使人们可以使用 IDE 的智能感知轻松找出和使用所有相似类型的类。

已编辑

我删除了 c# 标签。我无法认为 C# 和 Java 有不同的命名约定。

4

5 回答 5

2

选项 1 对我来说最有意义,并且似乎是整个内置 Java 类中使用的约定。例如,在java.io包装中,

BufferedReader
CharArrayReader
InputStreamReader

都是 的子类java.io.Reader

选项 2 似乎是多余class DataHandlerXX implements DataHandler的,例如 IDE 可能能够识别 的所有子类DataHandler,这意味着您不需要依靠排序来确定通用功能。

于 2012-09-25T02:29:19.123 回答
2

首先,接口的命名约定是

IDataHandler

然后,您的课程应该是:

class BitmapDataHandler
class VideoDataHandler
class SoundDataHandler

无论如何,我认为选项 #2 不那么相关;为了发现项目中的类,请使用Find all References命令(例如,如果您不使用 ReSharper,这会使事情变得更容易)。

于 2012-09-25T02:14:08.533 回答
2

我的公司是一家非常大的公司(财富 30 强),惯例是使用类似于您的选项 1的东西。即使是大型项目,它也足够具有描述性,并且对它有更好的吸引力。:)

您的选项 2仅用于混淆类的含义或目的,而不添加任何语义值。

于 2012-09-25T02:14:17.607 回答
2

我认为您应该使用名称空间进行分组。

最重要的是,如果项目大小妨碍了检索文件:使用 ReSharper。它使您能够以非常直观的方式搜索部分文件或类名。使用正确的工具可以防止您出于错误的原因遵守奇怪的标准。

于 2012-09-25T02:15:08.463 回答
1

我的首选选项是此处的许多答案的组合。

1)接口应该以 I 开头,IDataHandler这是常见的做法。
2) 在 Option1 之后命名类。名称不应描述结构。此类可以轻松实现多个接口,将它们全部列出会造成很大的混乱,以及由于不断变化的需求/更新而实现新接口或删除接口时会发生什么。
3) 使用命名空间对类似项目进行分组。这将使发现/理解设计更容易(正如您在选项 2 中的意图)。

将这些东西结合起来,在很少的背景下事情是如何运作的就很明显了。

// create a context with the namespace
namespace Media.Decoders
{
  // start interfaces with an I
  IDataHandler { ... }

  // name classes descriptively 
  class BitmapHandler : IDataHandler
  class VideoHandler : IDataHandler
  class SoundHandler : IDataHandler
}

// example if these handlers were decoding media types
// imagine navigating through the structure section by section
MyLibrary.Media.Decoders.BitmapHandler
// if everything is grouped logically if I were looking for an encoder a natural place to look would be
MyLibrary.Media.Encoders.BitmapHandler
于 2012-09-25T02:44:11.777 回答