类分层命名规则

时间:2021-08-10 10:17:23

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

总结

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