流暢なインターフェースは多くのタスクにとって非常に便利だと考えています。しかし、私は1つのクラスで流暢なメソッドとメソッドを変更してしまうと、不安を感じます。1つのクラスで流暢なインターフェースと流暢でないインターフェースを混在させる
だけの例では、(それは少し不自然だ、私と一緒にご負担ください):
トリミング、文字列ユーティリティクラスを想定すると、チェーン化のために良いようだ:
Str & Str::Trim() { return TrimLeft().TrimRight(); }
他の方法は、自然に新しいオブジェクトを返します:
Str Str::GetFirstToken() const
{
// result = first token;
return result;
}
そのthere'sa第三種、 - それ自体で - 論理オブジェクトと RETを変異させるだろう新しいものをURN:私は個別に各メソッドのために最も明白である署名を使用する場合
Str Str::SplitFirstToken()
{
result = GetFirstToken();
// this = remainder
return result;
}
、私は、これらの3つのタイプで終わる、と私はそれがあるクラスを消費するための非常に直感的ではありません怖いです、特に戻り値の型がmroe以下であるためです。 SplitToken
のようなメソッドは、コア機能を提供するので -
私はすでにStr
は不変作りに対して決定しました。私の主な問題は、流暢な方法を混ぜることです。あなたは何をしますか?
が
は「1が流暢である場合は、すべての変更方法が堪能でなければなりません」(下記参照)サブインターフェースにそれらを移動
そのインターフェイス
- で流暢な方法を使用していませんか?
流暢な方法に接尾辞を付けてください。
心配ですか?
???
サブインターフェースのアイデア:
void CStr::Trim() { TrimLeft(); TrimRight(); }
CStrFluent & Str::Fluent() { return CStrFluent(*this); }
....
str.Fluent().TrimLeft().TrimRight();
私は本当に余分な「流暢」好きではない、この上未定だ - それは何C++で
メソッド呼び出しの特にことあなたは考える?
[編集]ここでは、コード内に英語の文章を作成する上級の意味ではなく、単一のインスタンスで連鎖メソッド呼び出しの基本的な意味で「流暢」を使用しています。
"あなたはチェーンの真ん中の新しいオブジェクトに移行しています" - まさにそれが私の心配の核心です。 firstName = line.SplitToken(...)ですが、Trim()はカノニカルなことに思えますが、今はチェーンなしでスイングしようとします。 – peterchen