Riverpod の Provider 命名手引き
Riverpod の Provider の命名は何が良いのか迷うことがけっこうあると思うので、自分が良いと思う命名とその理由などを述べていきます。
ソースコード・ドキュメント・APIレファレンスなどを主に参考にしつつ、自分でしっくりくるルールとして整理した感じです。また、サンプルコードのため左辺での型明示をしている箇所がありますが、通常のコードでは省略が推奨です。
以下、Provider と 表記しているのは https://pub.dev/packages/provider ではなく、https://pub.dev/packages/riverpod の Provider クラス群を指します。
普通のProviderの名前
結論から言うと、「Provider名は基本的には対象の値名に Provider
接尾辞を付けた名前にするが、必要ないなら接尾辞省略でも良い」です。
例えば、以下のような認証周りの処理を担う Authenticator クラスがあったとします。
class Authenticator {
const Authenticator(this._read);
final Reader _read; Future<void> signIn() {}
Future<void> signOut() {}
}
このAuthenticatorの依存解決をするProviderの名前としては、概念的にはそのまま authenticator
で良いと思っています。
final authenticator = Provider((ref) => Authenticator(ref.read));final someProvider = Provider((ref) {
//利用側から見て違和感無し
ref.watch(authenticator).signIn();
});
しかし、そうすると他で watch
(や read
)をして一旦変数に入れようとした時にそれを同じく authenticator
としようとすると名前被りでコンパイルエラーになってしまいます。
final someProvider = Provider((ref) {
//コンパイルエラー
final authenticator = ref.watch(authenticator);
});
というわけで便宜上、基本的には機械的に Provider
という接尾辞を付けるのがお勧めです。