随着我项目的规模变大,我觉得应该有类似功能的类名约定。
假设有三个数据处理程序具有相似的功能,唯一的区别是它们处理的数据类型。
有界面DataHandler
。
interface DataHandler
有三种不同类型的数据,Bitmap,Video和Sound。
哪种选项是更广泛使用的命名约定?
class BitmapHandler
class VideoHandler
class SoundHandler
class DataHandlerBitmap
class DataHandlerVideo
class DataHandlerSound
我目前正在使用选项1,因为它听起来更好,但我认为使用选项2也有优势,特别是项目的规模很大。我可以通过按字母顺序排序类名来轻松检查存在多少数据处理程序,这也使人们可以使用IDE的智能感知来轻松找出并使用所有类似类的类。
EDITED
我删除了c#标签。我不认为C#和Java有不同的命名约定。
答案 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