天天看點

代碼名命規範淺析1、管理類名命2、傳播類名命3、回調類名命4、監控類名命5、記憶體管理類名命6、過濾監測類名命7、結構類名命8、設計模式類名命9、解析類命名10、網絡類命名

日常開發編碼中,代碼的名命是個大學問,能快速的看懂開源代碼的結構和意圖,也是一項必備的能力。在java項目的代碼結構中,采用長名命的方式來規範類的名命,能夠自己表達其主要意圖,配合進階IDE,可以減少編碼攻城獅的記憶負擔,靠模糊比對就能找到所需的資源。

借鑒最流行的java開源軟體的源碼,如netty、spring,guava等,以不同類的方式進行分析和歸納,希望能幫助搭建更好的了解名命的套路。

代碼名命規範淺析1、管理類名命2、傳播類名命3、回調類名命4、監控類名命5、記憶體管理類名命6、過濾監測類名命7、結構類名命8、設計模式類名命9、解析類命名10、網絡類命名

1、管理類名命

寫代碼,少不了對資源的管理,清晰的啟動過程可以有效的組織代碼。

Bootstrap、Starter

一般作為程式啟動器使用,或者作為啟動器的基類。通俗來說,可以認為是main函數的入口。

AbstractBootstrap
ServerBootstrap
MacosXApplicationStarter
           

Processor

某一類功能的處理器,用來表示某個處理過程,是一系列代碼片段的集合。

MappingProcessor
           

Manager

對有生命狀态的對象進行管理,通常作為某一類資源的管理入口。

TransactionManager
           

Holder

表示持有某個或者某類對象的引用,并可以對其進行統一管理。多見于不好回收的記憶體統一處理,或者一些全局集合容器的緩存。

ViewHolder
           

Factory

工廠模式的命名,尤其是在Spring中,多不勝數。

SessionFactory
           

Provider

Provider = Strategy + Factory Method。它更進階一些,把政策模式和方法工廠揉在了一塊,讓人用起來很順手。Provider一般是接口或者抽象類,以便能夠完成子實作。

AuthenticationProvider
           

Registrar

注冊并管理一系列資源。

CryptoServicesRegistrar
           

Engine

一般是核心子產品,用來處理一類功能。引擎是個非常進階的名詞,一般的類是沒有資格用它的。

StandardEngine
           

Service

某個服務,數不勝數。

PersistenceService
           

Task

某個任務,通常是個runnable。

ForkJoinTask
           

2、傳播類名命

為了完成一些統計類或者全局類的功能,有些參數需要一傳到底。傳播類的對象就可以通過統一封裝的方式進行傳遞,并在合适的地方進行拷貝或者更新。

Context

如果你的程式執行,有一些變量,需要從函數執行的入口開始,一直傳到大量子函數執行完畢之後。這些變量或者集合,如果以參數的形式傳遞,将會讓代碼變得冗長無比。這個時候,你就可以把變量統一塞到Context裡面,以單個對象的形式進行傳遞。

ApplicationContext
           

Propagator

傳播,繁殖。用來将context中傳遞的值進行複制,添加,清除,重置,檢索,恢複等動作。通常,它會提供一個叫做propagate的方法,實作真正的變量管理。

TransactionPropagator
           

3、回調類名命

使用多核可以增加程式運作的效率,不可避免的引入異步化。這時需要有一定的手段,擷取異步任務執行的結果,對任務執行過程中的關鍵點進行檢查。回調類API可以通過監聽、通知等形式,擷取這些事件。

Handler、Callback、Trigger、Listener

Handler通常表示持有真正消息處理邏輯的對象,它是有狀态的;Callback通常是一個接口,用于響應某類消息,進行後續處理;Trigger觸發器代表某類事件的處理,屬于Handler,通常不會出現在類的命名中;Listener的應用更加局限,通常在觀察者模式中用來表示特定的含義。

ChannelHandler
SuccessCallback
CronTrigger
EventListener
           

Aware

Aware是感覺的意思,一般以該單詞結尾的類,都實作了Aware接口。拿spring來說,Aware 的目的是為了讓bean擷取spring容器的服務。具體回調方法由子類實作,比如ApplicationContextAware。

ApplicationContextAware
           

4、監控類名命

Metric

表示監控資料,不要用Monitor了,比較醜。

HistogramMetric
           

Estimator

用于計算某一類統計數值的電腦。

ConditionalDensityEstimator
           

Accumulator

累加器的意思,用來緩存累加的中間計算結果,并提供讀取通道。

AbstractAccumulator
           

Tracker

一般用于記錄日志或者監控值。

PerformanceTracker
           

5、記憶體管理類名命

如果你的應用用到了自定義的記憶體管理,那麼下面這些名詞是繞不開的。比如Netty,就實作了自己的記憶體管理機制。

Allocator

與存儲相關,通常表示記憶體配置設定器或者管理器。

ArrayAllocator
           

Pool

表示池子,記憶體池,線程池,連接配接池,池池可用。

ConnectionPool
           

6、過濾監測類名命

程式收到的事件和資訊是非常多的,有些是合法的,有些需要過濾扔掉。根據不同的使用範圍和功能性差别,過濾操作也有多種形式。你會在架構類代碼中發現大量這樣的名詞。

Pipeline、Chain

一般用在責任鍊模式中。Netty,Spring MVC,Tomcat等都有大量應用。通過将某個處理過程加入到責任鍊的某個位置中,就可以接收前面處理過程的結果,強制添加或者改變某些功能。就像Linux的管道操作一樣,最終構造出想要的結果。

Pipeline
           

Filter

過濾器,用來篩選某些滿足條件的資料集,或者在滿足某些條件的時候執行一部分邏輯。如果和責任鍊連接配接起來,則通常能夠實作多級的過濾。

CorsFilter
           

Interceptor

攔截器,其實和Filter差不多。不過在Tomcat中,Interceptor可以拿到controller對象,但filter不行。攔截器是被包裹在過濾器中。

HttpRequestInterceptor
           

Evaluator

評估器的意思,可用于判斷某些條件是否成立,一般内部方法evaluate會傳回bool類型。比如你傳遞進去一個非常複雜的對象,或者字元串,進行正确與否的判斷。

ArithmeticExpressionEvaluator
           

Detector

探測器,用來管理一系列探測性事件,并在發生的時候能夠進行捕獲和響應。

XMLVersionDetector
FileTypeDetector
           

7、結構類名命

除了基本的資料結構,如數組、連結清單、隊列、棧等,其他更高一層的常見抽象類,能夠大量減少大家的交流,并能封裝常見的變化。

Cache

緩存。

EhCacheCache
           

Buffer

buffer是緩沖,不同于緩存,它一般用在資料寫入階段。

ByteBuffer
           

Wrapper

用來包裝某個對象,做一些額外的處理,以便增加或者去掉某些功能。

ResponseWrapper
           

Option、Param、Attribute

用來表示配置資訊。說實話,它和Properties的差別并不大,但由于Option通常是一個類,是以功能可以擴充的更強大一些。它通常比Config的級别更小,關注的也是單個屬性的值。Param一般是作為參數存在,對象生成的速度要快一些。

SelectOption
           

Aggregator

聚合器,可以做一些聚合計算。比如分庫分表中的sum,max,min等聚合函數的彙集。

PipelineAggregator
           

Iterator

疊代器,可以實作java的疊代器接口,也可以有自己的疊代方式。

StringCharacterIterator
           

Batch

某些可以批量執行的請求或者對象。

BatchRequest
           

Limiter

限流器,使用漏桶算法或者令牌桶來完成平滑的限流。

RateLimiter
           

8、設計模式類名命

Strategy

将抽象部分與它的實作部分分離,使它們都可以獨立地變化。政策模式,相同接口,不同實作類,同一方法結果不同,實作政策不同。比如一個配置檔案,是放在xml裡,還是放在json檔案裡,都可以使用不同的provider去命名。

BufferStrategy
           

Adapter

将一個類的接口轉換為客戶希望的另一個接口,Adapter模式使得原本由于接口不相容而不能一起工作的那些類一起工作。

AuthorizationServerConfigurerAdapter
           

Event

表示一系列事件。

KeyEvent
           

Delegate

代理或者委托模式,委托模式是将一件屬于委托者做的事情,交給另外一個被委托者來處理。

MenuDelegate
           

Builder

将一個複雜對象的建構與它的表示分離,使得同樣的建構過程可以建立不同的表示。

JsonBuilder
           

Template

模闆方法類的命名。定義一個操作中的算法的骨架,而将一些步驟延遲到子類中。模闆方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。

JDBCTemplate
           

Proxy

代理模式,為其他對象提供一種代理以控制對這個對象的通路。

ProxyFactory 
           

9、解析類命名

寫代碼要涉及到大量的字元串解析、日期解析、對象轉換等。根據語義和使用場合的差別,它們也分為多種。

Converter、Resolver

轉換和解析。一般用于不同對象之間的格式轉換,把一類對象轉換成另一類。注意它們語義上的差別,一般特别複雜的轉換或者有加載過程的需求,可以使用Resolver。

DataSetToListConverter
InitRefResolver
           

Parser

用來表示非常複雜的解析器。

JSONParser
           

Customizer

用來表示對某個對象進行特别的配置。由于這些配置過程特别的複雜,值得單獨提取出來進行自定義設定。

ContextCustomizer
           

Formatter

格式化類,主要用于字元串、數字或者日期的格式化處理工作。

SimpleDateFormat
           

10、網絡類命名

Packet

通常用于網絡程式設計中的資料包。

DatagramPacket
           

Protocol

使用者網絡程式設計中,用來表示某個協定。

HttpProtocol
           

Encoder、Decoder、Codec

編碼解碼器

RedisEncoder
RedisDecoder
RedisCodec
           

Request、Response

一般用于網絡請求的進和出。如果你用在非網絡請求的方法上,會顯得很怪異。

Util、Helper

都表示工具類,Util一般是無狀态的,Helper以便需要建立執行個體才能使用。

HttpUtil
TestKeyFieldHelper
           

Invoker、Invocation

invoker是一類接口,通常會以反射或者觸發的方式,執行一些具體的業務邏輯。通過抽象出invoke方法,可以在invoke執行之前對入參進行記錄或者處理;在invoke執行之後對結果和異常進行處理,是AOP中常見的操作方式。

MethodInvoker
ConstructorInvocation
           

注:名命是編碼中非常重要的一環,希望大家能夠找到其中的規律,讓你的代碼功能強大且優雅。