我認爲流暢的接口對於很多任務來說非常方便。但當我最終在一個課程中混合流利的方法和修改方法時,我感到不安。在一個類中混合流暢和非流暢的接口
只是一個例子(這是一個有點做作,請多多包涵):
假設一個字符串的工具類,微調似乎不錯的鏈接:
Str & Str::Trim() { return TrimLeft().TrimRight(); }
其他方法自然會返回一個新對象:
Str Str::GetFirstToken() const
{
// result = first token;
return result;
}
而且看到一隻3型,即 - 本身 - 邏輯上發生變異的對象和 RET甕一個新問題:
Str Str::SplitFirstToken()
{
result = GetFirstToken();
// this = remainder
return result;
}
當我使用是最明顯的每個方法單獨簽名,我結束了這三種類型,恐怕它並不適合消費類,這是它非常直觀,特別是因爲返回類型是mroe或更少。
我已經決定不使Str
不變的 - 因爲像SplitToken
方法提供核心功能。我的主要問題是混合流利的方法你會做什麼?
不要用流利的方法在接口
它們移動到一個子接口(見下文)
「如果一個流暢,所有的修改方法應流利」?
爲流利的方法使用seocific前綴?
不用擔心?
???
子接口的想法:
void CStr::Trim() { TrimLeft(); TrimRight(); }
CStrFluent & Str::Fluent() { return CStrFluent(*this); }
....
str.Fluent().TrimLeft().TrimRight();
我對這個拿不定主意,我真的不喜歡額外的「流利」 - 尤其是它在C++
什麼方法調用您認爲?
我在這裏使用了「流利」這個詞,它是在單個實例上鍊接方法調用的基本含義,而不是在代碼中創建英語句子的高級意義上。
「你正在過渡到鏈中間的新對象」 - 這正是我關心的核心,說得好!我會盡量擺脫現在沒有鏈接,雖然firstName = line.SplitToken(...)。修剪()似乎是一個規範的事情。 – peterchen 2009-07-08 18:21:42