2011-02-02 3 views
1

디자이너로서 나는 힘/단순함 균형을 맞추는 인터페이스를 제공하는 것을 좋아합니다. 예를 들어 LINQ 디자이너는 도트 표기법과 쿼리 표기법을 모두 제공했기 때문에 이러한 원칙을 따랐습니다. 첫 번째는 더 강력하지만 두 번째는 읽기 쉽고 따를 수 있습니다. LINQ에 대한 나의 평가에 동의하지 않는다면, 어쨌든 제 관점을 보시기 바랍니다. LINQ는 단지 예일뿐입니다. 내 게시물은 LINQ에 관한 것이 아닙니다."다이얼 가능"전력 원칙 (일명?)

나는이 원리를 "다이얼 가능한 능력"이라고 부른다. 하지만 다른 사람들이 무엇이라고 부르는 지 알고 싶습니다. 확실히 어떤 사람들은 "키스 (KISS)"가 일반적인 용어라고 말할 것입니다. 그러나 저는 KISS를 수퍼 세트 또는 "소비주의"의 관행으로 봅니다. LINQ를 다시 사용하여 필자의 관점에서 항상 점 표기법보다 쿼리 표기법을 사용하려고하는 프로그래머 팀이 KISS를 연습하고 있습니다. 따라서 LINQ 디자이너는 KISS를 연습하는 반면 LINQ 디자이너는 "다이얼 가능한 기능"을 구현했습니다. 두 사람이 함께 아름다운 음악을 만듭니다.

편집 다른 예를 들어 보겠습니다. 수 개의 서명이있는 로깅 도구를 상상이 개 용도 :

void Write(string message); 
void Write(Func<string> messageCallback); 
두 서명의 목적은 이러한 요구에 충족하는 것입니다

:이 오버로드를 갖는

//Every-day "simple" usage, nothing special. 
myLogger.Write("Something Happened" + error.ToString()); 

//This is performance critical, do not call ToString() if logging is 
//disabled. 
myLogger.Write(() => { "Something Happened" + error.ToString() }); 

이 때문에 "전화 할 힘"을 나타냅니다 소비자는 간단한 인터페이스 또는 강력한 인터페이스를 선택할 수 있습니다. KISS를 사랑하는 소비자는 대부분의 경우보다 간단한 서명을 사용하고 전원이 필요할 때 "바쁜"보이는 서명을 허용합니다. 또한 강력한 서명을 사용하면 코드가 성능에 결정적인 요소라는 것을 독자에게 알리기 때문에 자체 문서 작성에 도움이됩니다. 로거가 강력한 서명 만 가지고 있다면 "다이얼 가능한 능력"이 없을 것입니다.

이렇게 전체 서클이됩니다. 아직 자신의 "다이얼 가능한 능력"을 유지하는 것이 행복하다. 그러나이 연습에 대한 확실한 명칭을 놓치고 있다고 생각하지 않을 수 없다.

p.s. 과 관련된 또 다른 예는 "다이얼 가능한 기능"과 동일하지 않은이며 Scott Meyer의 원칙은 "인터페이스를 올바르게 사용하기 쉽고 잘못 사용하기 어렵게 만듭니다."입니다.

+0

나는 이것을 "강력한 API"부를 것이다,하지만 난 그게 너무 일반적 특정 패턴의 이름을 수 생각한다. – earldouglas

+1

나쁜 질문은 아니지만 프로그래머 IMHO에 속합니다. – TrueWill

+1

이전에 Microsoft가이 원칙을 _ "가장 유용한 [기능]을 쉽게 만들고 나머지는 [기능을 가능하게하십시오"_]라고 설명하는 것을 읽었습니다 (그러나 기억이 안납니다). 내가 막연하게도 "특징"대신에 90 %와 10 %의 숫자를 언급하는 것을 기억하는 것 같습니다. – stakx

답변

0

나는이 원리를 "전화 가능 전원"이라고 부른다. 그러나 나는 다른 사람들이 그것을 부르는 것을 알고 싶습니다. .

개인적으로 "다이얼 가능한 기능"에 대해 들어 본 적이 없으며 업계 표준 용어로 생각하지 않습니다.

LINQ의 경우 우리는 그 디자인을 fluent interface이라고합니다.

유창한 인터페이스는 개체의 모든 메서드가 해당 개체와 동일한 형식을 반환하도록 디자인되어 있으므로 메서드 체이닝이 쉬워집니다. StringBuilder.Append 과부하 (fluent NHibernateRhinoMocks)에서 동일한 유창한 디자인을 볼 수 있습니다.

JQuery의 경우 메서드 체인에 유창한 인터페이스도 사용되지만 "쿼리"또는 "DSL"이 해당 선택기 표기의 적절한 이름이라고 생각합니다.

(Obj-C selectors) 동일한 용어를 사용하지만 완전히 다른 것을 설명합니다.)

질의하는 DSL로 설명 되었기 때문에 대부분의 사람들은 시퀀스를 입력으로 받아 들여 출력을 시퀀스로 반환한다고 추론 할 수 있습니다. 쿼리 표기법은 XPath와 거의 동일한 기능을 수행하며 더 많은 종소리와 호루라기가 있습니다.

최대 절전 모드 HQL 많은 SQL 언어의 상단에 질의 DSL이며, 매우 피상적 ​​인 방법으로 정규 표현식에 당신은, 원칙적으로 fluent interface for regexes 할 수 있습니다 (문자열 시퀀스의 새로운 세트로 문자열 시퀀스를 변환 질의하는 DSL은, 하지만 아마 당신의 눈을 발톱으로 만들 것입니다).

+0

예 점 표기법은 유창한 API입니다. 그 자체로 내가 전화 가능한 능력이라고 부르는 것이 아닙니다. 두 가지 방법 (유창한 API와 쿼리 표기법)이 제공되었다는 사실은 제가 염두에 두었던 것입니다. –

1

"다이얼"의 위치/레벨이 두 개인 경우 단순히 façade을 말하는 것 같습니다.

1

"진보성 공개"

"기타"버튼과 같이 사용자 인터페이스를 사용하기 때문에 이미 익숙한 것일 수 있습니다. 그러나 개념은 좀 더 일반적입니다. Lidwell, 홀든과 버틀러에 의해 "디자인의 보편적 원리"에서

:

Progressive disclosure involves separating information into 
    multiple layers and only presenting layers that are necessary or relevant.