非同期メソッド名を付けたい
- 原則 -Async 接尾辞:
GetUserAsync
,LoadConfigAsync
,ResizeImageAsync
- 待機不要の発火系は
FireAndForget
を避け、用途語で:QueueSend
,EnqueueWork
- 並列可否を含めたい:
ProcessBatchAsync
,ProcessInParallelAsync
public Task<User> GetUserAsync(UserId id, CancellationToken ct = default);
public Task LoadConfigAsync(string path, CancellationToken ct = default);
bool プロパティ/フラグを付けたい
意味に応じた接頭辞を選択:
- Is(状態):
IsEnabled
,IsEmpty
,IsDirty
- Has(所有):
HasValue
,HasChildren
- Can(能力):
CanExecute
,CanRead
,CanRetry
- Should(方針):
ShouldRetry
,ShouldCache
- Allow/Enable(設定):
AllowOverwrite
,EnableLogging
例外を投げずに「試す」APIを作りたい
- Try- + 成功時に値を
out
:TryParse
,TryGetValue
,TryLoad
,TryResize
- 戻り値は
bool
、失敗理由はout error
やresult
に含める。
public static bool TryParseUser(string s, out User result);
public bool TryLoad(string path, out Image img);
イベント名/発火メソッド名を決めたい
- イベントは「何が起きたか」を過去分詞/完了形で:
Loaded
,Changed
,Completed
,Failed
- 発火メソッドは On-:
OnLoaded
,OnChanged
- ハンドラ型は
EventHandler
かEventHandler<TEventArgs>
。
コレクション操作の動詞を選びたい
- 追加/削除:
Add
,AddRange
,Remove
,RemoveWhere
- 検索:
Contains
,Find
,IndexOf
,Any
,FirstOrDefault
- 射影/整列:
Select
,OrderBy
,ThenBy
,GroupBy
,Distinct
- 結合/その他:
Join
,Zip
,Shuffle
ファイル/IO の名前を付けたい
- クラス:
FileService
,PathResolver
,DirectoryScanner
,StreamFactory
,ArchiveExtractor
- メソッド:
Copy
,Move
,ReadAllBytes
,WriteAllText
,Watch
/Unwatch
- プロパティ:
FullPath
,Extension
,IsReadOnly
,Size
,CreatedAt
,LastModified
ネットワーク/HTTP の命名をしたい
- クラス:
HttpClientFactory
,EndpointResolver
,JwtTokenProvider
- メソッド:
ConnectAsync
,SendAsync
,Authorize
,Authenticate
- プロパティ:
BaseAddress
,Headers
,Timeout
画像処理のメソッド名を選びたい
- 幾何:
Resize
,Crop
,Rotate
,Flip
,Warp
,Align
- フィルタ:
Blur
,Sharpen
,Denoise
,Threshold
,Segment
,Dilate
,Erode
- 合成:
Blend
,Composite
,Merge
WPF/UI の命名をしたい
- クラス:
DialogService
,CommandBinder
,AdornerLayerHost
- メソッド:
Show
,Hide
,Bind
,InvalidateVisual
,Focus
- プロパティ:
IsEnabled
,DataContext
,SelectedItem
,ItemsSource
クラスの役割別サフィックスを付けたい
- 実装/役割:
-Service
,-Provider
,-Factory
,-Repository
,-Strategy
,-Options
,-Settings
- UI/WPF:
-Behavior
,-Converter
,-Template
,-View
,-ViewModel
- 並行/非同期:
-Scheduler
,-Dispatcher
,-Worker
,-Processor
予約語やBCL型と衝突しそうなとき
- 衝突回避の接尾辞:
Task
→WorkItem
/TaskInfo
、List
→ListModel
/ItemList
Context
を具体化:AppContext
,ImageContext
,DbContext
- 頭字語の大文字ルール:
HTTPClient
ではなくHttpClient
リネーム時の安全な置換案
- 曖昧動詞の具体化:
Process
→Validate
/Transform
/Resize
- 負の論理の反転:
IsNotEnabled
→IsEnabled
- 役割の明確化:
Manager
多用を避け、Service
/Factory
/Repository
等に細分化
クイック表(やりたいこと → 候補)
目的 | 候補 |
---|---|
設定を読み込む | LoadConfig , ReadSettings , ConfigureFrom |
再試行を表す | Retry , Backoff , ShouldRetry , MaxRetryCount |
キャッシュ関連 | Cache , Cached , CacheKey , CachePolicy , TryGetCached |
並列実行 | RunInParallel , ProcessInParallelAsync , MaxConcurrency |
ファイル監視 | Watch , Unwatch , FileWatcher , OnChanged |
画像の拡大縮小 | Resize , Scale , Resample , Width/Height |
UI の選択状態 | SelectedItem , SelectedIndex , IsSelected |
認証/認可 | Authenticate , Authorize , JwtToken , Claims |
コピペ用スニペット
public interface IClock { DateTimeOffset Now { get; } }
public interface IFileSystem { Task<byte[]> ReadAllBytesAsync(string path, CancellationToken ct = default); }
public sealed class RetryPolicyOptions
{
public int MaxRetryCount { get; init; } = 3;
public TimeSpan Delay { get; init; } = TimeSpan.FromMilliseconds(200);
public bool ShouldJitter { get; init; } = true;
}
public static class Safe
{
public static bool TryGetCached(this IDictionary cache, string key, out T value)
=> cache.TryGetValue(key, out value);
}
コメント