较好的类名命名规则

翻译 2015年11月19日 14:30:59

2015年11月19日 第一版

链接:http://qiita.com/KeithYokoma/items/ee21fec6a3ebb5d1e9a8
原作者:KeithYokoma
译者:dssunxun

类名一般上多使用名词,方法名一般多用动词和助动词,这是因为类名要抽象出拥有某种职责的某物,
所以多使用名词。

另一方面,声明接口时,我们一般使用形容词来作为接口的名称(例如:Iterable、Closeable等)。
通过使用形容词,可以较好的注明类所拥有的特性

业务逻辑类

即一般所谓的Model层,该层有着各种不同功能的类。
一般性的,给该层的类起名都是Model或是Manager这样的名字,而随着业务的增多,该层也会变的越来越肥大。
实际上在Model层中也有各种各样的层,通过给它们起好名字明确它们的功能,然后组合起来建立起业务逻辑

操作DataSource的层

大致上就是拥有某些I/O的基础功能(增删查改、request等)的类,比如说,拥有操作DB逻辑的类、拥有通过
HTTP通信获取Response的类

名称 补充说明
Client 类似HttpClient这样的,在有Server-Client的含义的情况下使用 TwitterApiClient, QiitaApiClient
Gateway 作为访问API时的网关时使用 TwitterTimelineGateway, QiitaAccountGateway
Store,Storage、Registry 访问数据库,在磁盘进行数据持久化时使用 FavoriteSettingStore, DataStorage, ConfigRegistry
Cache 缓存时使用 TimelineCache
Log 日志。或是存储操作历史记录的路径 UsageLog
History 存储历史记录的路径 UsageHistory
Configuration, Preference, Setting 存储设定数据的路径 TimelineConfiguration

有必要的话,可将I/O的基本功能各自分开实现(可提供一个统一管理的接口或是一开始就创建个统一管理的类来操作)

名称 补充说明
Logger 执行日志操作 UsageLogger
Cleaner, Sweeper 清除数据时使用 CacheCleaner, CacheSweeper
加工数据的层
名称 补充说明
Filter 筛选数据时使用 TimelineFilter
Extractor 从某个数据中抽出其他数据 MessageExtractor
Formatter 格式化某个数据输出为其他数据 MessageFormatter
Collector 收集数据 AnalyticsDataCollector
拉取DataSource的层

取得数据、存储为Cache、然后再将其返回给Controller和Presenter层的层。该层的Model从使用者看来,无需在意获得
的数据是否是从Cache而来。

名称 补充说明
Provider 将上面提到过的DB、http通信、Cache等封装化后的上位层。或是Android中的ContentProvider TwitterTimelineProvider
Manager 管理数据 AccountManager
Loader 读取数据 TimelineLoader
Logger 写日志、或是提供访问Log的抽象层 RecentUsageLogger
Configurator 存储设定的默认值、将某种数据自动的保存到设定 FirstSettingConfigurator
Migrator 处理当版本升级等数据结构发生变化时的逻辑 UserDataMigrator
进行异步处理的层
名称 补充说明
Job, Task, Runnable, Executable 统一处理异步操作 UploadJob, MigrationTask
Runner, Executor, Worker 执行被给予的Job和Task UploadJobRunner, MigrationTaskExecutor
Aware 拥有同步操作相关的某些Context,表示在其管理下的接口(Spring Framework有使用) ApplicationContextAware

集成访问FrameWork的层

基于Facade模式、提供通向其他的Framework和SubSystem接口的层

名称 补充说明
Facade 实现Facade模式 BoundServiceFacade
Service 将兼容性的实现给封装化,并实现对各种功能的访问的层 ApplicationControllerService
Resolver 根据用户环境进行Routing处理的层 ContentResolver

操作View的类

即一般上的Controller层,根据所用的Framework有所不同,大致上一般会命名为如下。
严格来讲,与Presenter有些许的不同,在此将其包含进去

名称 补充说明
Activity Android中使用
Fragment Android中使用
ViewController iOS中使用
Controller MVC中的Controller
Screen.Presenter MVP中的Presenter。Mortar中使用
Window
包含UI上的动作的类

抽象特定的操作,并将该操作想执行的处理综合起来的类。也可作为接口名称使用

名称 补充说明
Action 表示操作 SubmitAction, CancelAction
Dispatcher, Handler 接受操作执行处理 SubmitActionDispatcher, UserActionHandler
Listener, Watcher 监视操作。Observer模式的实现名 ClickListener, TextEditWatcher

总结

因语言和框架带来的作法和规则的不同,并没有什么一个最好的方法。设计和重构时,在想好了
如何分层后,如何命名也非常重要。在上面我列举了很多,但是直接用有名的设计模式和框架中用到的名字
有可能也比较好。所以尽可能的清楚地起个能把一个类的作用给表现出来的名字吧

相关文章推荐

Java中的类、方法、属性的命名规则

在面向对象编程中,对于类,对象,方法,变量等方面的命名是非常有技巧的。比如,大小写的区分,使用不同字母开头等等。但究其本,追其源,在为一个资源其名称的时候,应该本着描述性以及唯一性这两大特征来命名,才...

class类名命名规则

about     关于 account     账户 action     操作 ad,advertisment     广告 arrow     箭头图标 article     文章 ...

几种常见的程序命名规则

几种常见的程序命名规则   正确并形象地给函数、变量命名,不仅可以增加程序的可读性,也是程序员编程风格的一种反映。较好的命名习惯,可以有效的提高程序的可维护性。以下介绍几种常用的变量命名规则。 ...

Java中的类、方法、属性的命名规则

在面向对象编程中,对于类,对象,方法,变量等方面的命名是非常有技巧的。比如,大小写的区分,使用不同字母开头等等。但究其本,追其源,在为一个资源其名称的时候,应该本着描述性以及唯一性这两大特征来命名,才...

[转]类命名规范

在引入细节之前,先说明一下命名规范的整体原则:同一性在编写一个子模块或派生类的时候,要遵循其基类或整体模块的命名风格,保持命名风格在整个模块中的同一性。 标识符组成标识符采用英文单词或其组合,应当直...
  • novrose
  • novrose
  • 2011年04月29日 11:36
  • 4599

java编程规范之java命名规范

想要成为一个优秀的程序员,首先要培养良好的编程习惯,为了提高代码的可读性,必须有好的命名规范。 这篇文章是小编结合网上的很多资料整理出来的,若有不当或错误的地方,欢迎大家指正 在文章开始前,为方便阅读...

Java项目命名规范(简洁版)——高薪必看

作为一个优秀的项目经理或项目带头人,必须养成良好优秀的项目命名规则和习惯。接下来把查到的资料整理一下,实际上,在很多项目中,也是遵循以下的规则。 一、项目名 全部小写,比如cms、workde...

java开发命名规范

java开发命名规范 使用前注意事项: 1、  由于Java面向对象编程的特性, 在命名时应尽量选择名词 2、  驼峰命名法(Camel-Case): 当变量名或函式名是由一个或多个单字...

类名.class 类名.this 详解

原文链接:http://www.cnblogs.com/PengLee/p/3993033.html 类名.class      我们知道在java中,一个类在被加载的时候虚拟机就会自动的生成一个...

如何“优雅”地给你的类命名

本文是翻译NOVODA上的一篇博客“This one simple change for better class naming will blow your mind”楼主读了该大神的博客后深受启发...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:较好的类名命名规则
举报原因:
原因补充:

(最多只允许输入30个字)