2010-01-22 2 views
2

도서관이나 API를 어떻게 디자인 할 것인가에 대한 몇 가지 사항을 읽었으며 Joshua Bloch의 Google Tech Talks에서의 멋진 대화를 발견했습니다. 이제는 전문 API 개발자가 아니지만 많은 프로그래밍과 클래스/기능이 비슷하다고 생각합니다. 똑같은 기능의 축소 된 버전 (명확한 동작 분리, 쉽고 즐거운 사용, 깨끗한 코드 권장)이긴하지만 비슷합니다. 등누구나 이런 식으로 API 또는 라이브러리 코드를 디자인합니까?

좀 널리 사용되는 오픈 소스 자바 코드를 통과하고이 아이디어 없어 (새 아무것도하지만, 그냥 ... 명쾌하게 그것을 넣어)

우리가 예를 들어 의사 코드 보자되었다 (또는 어쩌면 일부 방언의 BASIC) :

1. new label 
2. set name 'hello world' 
3. set color 'blue' 
4. show 'topmost' 
5. on click hide 

지금 나는이 같은 뭔가 할 수 있도록하려는 것입니다 자바 코드에 의해 영감 :

1. Label l = new Label() 
2.   .setName('Hello World') 
3.   .setColor('blue') 
4.   .show(zindex.top); 
5. l.onClick = l.hide() ; 

내 질문이 있습니다 :
합니까이 같은 의사 코드에서 시작하여 다른 사람 디자인 API를?

작은 것이 좋은가요? 각각 10 개의 클래스로 10 개의 클래스를 작성하십시오. 각 메소드는 내부에 5-6 개의 라인 코드를 넘지 않습니다. 이것은 분명히 설계된 클래스의 크기를 보여주기위한 거친 숫자 세트입니다. 취미 프로젝트가 아닌 전체 API에 가까운 곳은 없습니다. 작지만 작은 일을하지만 잘 수행하는 전문 패키지.

누군가이 접근법에 심각한 단점을 발견 했습니까?

은 내가 하나 실제 이익힘이 먼저 사용 사례를 기록 할 것으로 생각합니다.

다른 점은 명사와 동사가 닷지 MultiPhraseAbstractParadigmDesignPatternImplementor 증후군 - D에 최종 제품이 가능, 간단한를 유지한다는 것이다

답변

3

이 패턴은 fluent interface이라는 비교적 일반적인 디자인 패턴입니다. 함수형 언어에서는 일반적이며 다른 곳에서는 인기를 얻고 있습니다. 나는 Scheme에서 처음 보았습니다.

이것은 매우 편리하고 읽기 쉬운 관용구이지만, 한 번에 하나의 함수 호출에서 둘 이상의 변수를 초기화하려는 경우가 종종 있습니다. 예를 들어, 데이터의 조합에 따라 설정해야하는 내부 상태가 있거나 기본값을 설정하고 덮어 쓸 때 값 비싼 경우. 따라서 모든 "패턴"과 마찬가지로 현명하고 사전에 사용하십시오.

0

네, jQuery를이, 그것은 항상 끝을 설계하는 방식이다 이처럼 체인 방법을 사용할 수 있도록 스스로를 반환합니다.

0

빈 클래스와 메소드로 시작하는 경향이 있습니다. 그것의 진짜로 아래로 대 디자인의 아래로 대 질문.

나는 거대한 화이트 보드를 선호한다.

1

Jquery가 정확하게 수행합니다.http://net.tutsplus.com/tutorials/javascript-ajax/jquery-1-4-released-the-15-new-features-you-must-know/에서 :

jQuery('<div/>', { 
    id: 'foo', 
    css: { 
     fontWeight: 700, 
     color: 'green' 
    }, 
    click: function(){ 
     alert('Foo has been clicked!'); 
    } 
}); 

또는 사전 1.4 :

new StackPanel { 
    Children = { 
     new TextBlock { Text = "Hi there", Width = 50 }, 
     new TextBox { Width = 100 }, 
     new Border { 
      Content = new ListBox() 
     } 
    } 
}; 
:

jQuery('<div/>') 
    .attr('id', 'foo') 
    .css({ 
     fontWeight: 700, 
     color: 'green' 
    }) 
    .click(function(){ 
     alert('Foo has been clicked!'); 
    }); 

또한 코드에서 WPF를 생성하는 C#에서 비슷한 일을했습니다

관련 문제