유창한 인터페이스는 많은 작업에서 매우 편리하다고 생각합니다. 하지만 유창한 방법을 혼합하고 한 클래스에서 메서드를 수정하면 결국 불안해집니다.유창한 인터페이스와 유창한 인터페이스를 하나의 클래스로 혼합하기
그냥 예 (조금 인위적인이다, 나와 함께 곰하시기 바랍니다) :
트리밍, 문자열 유틸리티 클래스를 가정 체인 좋은 것 같다
Str & Str::Trim() { return TrimLeft().TrimRight(); }
다른 방법은 자연스럽게 새로운 객체를 반환 :
Str Str::GetFirstToken() const
{
// result = first token;
return result;
}
그리고 탑승객 중에 3 종류, 그 - 그 자체로는 - 논리적으로 및 RET 개체를 변이 것 새로운 URN :
Str Str::SplitFirstToken()
{
result = GetFirstToken();
// this = remainder
return result;
}
을 나는 개별적으로 각각의 방법에 대한 가장 명백한 서명을 사용하는 경우, 나는이 세 가지 유형으로 결국, 나는 그것이 클래스를 소비하는 매우 직관적 아니다 두려워, 특히 반환 유형이 mroe 또는 그 이하이기 때문에 특히 그렇습니다. SplitToken
같은 방법은 핵심 기능을 제공하기 때문에 -
이미 Str
불변 만들기에 대 한 결정했다. 나의 주요 문제는 유창한 방법을 혼합하는 것입니다. 당신은 무엇을 할 것입니까?
가
"은 하나 유창한 경우 모든 수정 방법 유창한 있어야"(아래 참조) 하위 인터페이스로 이동
그 인터페이스
- 유창한 방법을 사용하지?
유창한 방법에 대한 접두사 접두어를 사용 하시겠습니까?
걱정하지 않으시겠습니까?
???
서브 인터페이스 아이디어 :
void CStr::Trim() { TrimLeft(); TrimRight(); }
CStrFluent & Str::Fluent() { return CStrFluent(*this); }
....
str.Fluent().TrimLeft().TrimRight();
내가 정말 여분의 "유창한"좋아한다, 이것에 미정이다는 - 그것은 무엇
++ C에서 메서드 호출 특히 있음 너 생각하니?
[편집] 코드에서 영어 문장을 만드는 고급 감각이 아니라, 단일 인스턴스에서 체인 메소드 호출의 기본 의미에 대해 "유창함"을 사용하고 있습니다.
"체인의 중간에있는 새 오브젝트로 전환 중입니다."- 정확히 말하면 그것이 내 관심사의 핵심입니다. firstName = line.SplitToken (...). 그러나 Trim()은 표준적인 일을하는 것처럼 보입니다. – peterchen