类命名约定

时间:2012-09-25 02:11:23

标签: java coding-style naming-conventions

随着我项目的规模变大,我觉得应该有类似功能的类名约定。

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

有界面DataHandler

interface DataHandler

有三种不同类型的数据,Bitmap,Video和Sound。

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

选项1。

class BitmapHandler

class VideoHandler

class SoundHandler

选项2。

class DataHandlerBitmap

class DataHandlerVideo

class DataHandlerSound

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

EDITED

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

5 个答案:

答案 0 :(得分:2)

首先,接口的命名约定是

IDataHandler

然后,你的课程应该是:

class BitmapDataHandler
class VideoDataHandler
class SoundDataHandler

无论如何,我认为选项#2并不那么重要;为了发现项目中的类,请使用查找所有引用命令(例如,如果不使用ReSharper,这会使事情变得更加容易)。

答案 1 :(得分:2)

我的公司是一家非常大的公司(财富30强),其惯例是使用选项1 的内容。对于即使是大型项目而言,它足够具有描述性,并且只有一个更好的环。 :)

选项2 仅用于模糊类的含义或目的,而不会添加任何语义值。

答案 2 :(得分:2)

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

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

答案 3 :(得分:2)

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

BufferedReader
CharArrayReader
InputStreamReader

java.io.Reader的所有子类。

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

答案 4 :(得分: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