2012-07-12 3 views
6

이 질문은 javascript 관점에서 나 왔지만 다른 언어에도 적용될 수 있습니다.여러 메서드, 여러 매개 변수 또는 옵션 매개 변수를 사용하는 경우

저는 최근에이 문제에 부딪혀 왔으며, 방법을 빌드하는 방법에 대해 모범 사례가 있었는지 또는 적어도 훌륭한 디자인 표준이 있는지 궁금해하고있었습니다.

나는 각

  • 여러 방법에 대한 간단한 예제와 함께 다음과 같다 참조 확실한 옵션 :

    this.makeGetRequest = function(controller){...} 
    this.makeSynchronousGetRequest = function(controller){...} 
    this.makePostRequest = function(controller, data){...} 
    
  • 한 가지 방법은 더 많은 매개 변수 :

    //data would be an optional parameter 
    // this.makeRequest("friends", "GET", true); 
    // this.makeRequest("friends", "POST", false, newFriend); 
    this.makeRequest = function(controller, type, isSynchronous, data){...} 
    
  • 옵션 매개 변수가있는 하나의 방법 :

    this.makeRequest = function(controller, type, options); 
    this.makeRequest("friends", "POST", {data:newFriend, isSync:false}); 
    

는 HTTP 예 그냥 질문을 동기를 요청하지만이 정의/변수의 다양한 양의와 공공 직면 기능이 작동합니다.

3 개 모두 분명히 기능상 동일합니다. 그러나 좋은 연습은 무엇입니까? 따라야 할 기준이나 가이드 라인이 있습니까?

답변

2

매개 변수 options의 장점은 명확성을 희생하지 않고 무제한의 옵션을 허용한다는 것입니다. 누군가 data: 또는 isSync:을 지정할 때 어떤 설정이 채워지는지 분명히 알 수 있습니다. 함수의 13 번째 매개 변수를 false으로 설정하는 것을 혼동하는 방법을 기억하십시오.

마지막 두 옵션 사이에서 (1) 총 4 개 미만의 매개 변수가있는 경우 (2) 순서가 논리적이고 기억하기 쉬운 경우 (URL을 입력 한 다음 데이터), (3) 둘 이상 (선택 사항)은 선택 사항입니다. 어쨌든 엄지 손가락의 규칙입니다.

여러 메서드와 매개 변수화 방법은 어떻습니까? 여러 가지 방법은 가능성이 적은 경우 (GET 대 POST, UseDefaults 대 DontUseDefaults 또는 기타)부터 시작하는 옵션 일뿐입니다.

  1. 의 구분은 매우 중요하다이 (동기 요청은 비동기 요청에서 근본적으로 다른 동작과 나는 개발자가 의식적으로 적용 할 선택합니다 (: 경우에만 그것에 대해 생각, 내가 설치 별도의 방법을 가능성입니다. 대조적으로 GET과 POST가 귀하의 요청 중 하나의 속성 일 뿐이지 만, 잘못하면 모든 결론을 내리는 결정이 아닙니다.)

  2. 다른 옵션은 없습니다. 어쨌든 설정하십시오. foo.get() 또는 foo.post()를 호출할지 여부를 먼저 기억해야한다면 회원이 options 개체를 채우기 위해 어쨌든 두 개의 다른 장소에서 결정을 내릴뿐입니다. 차라리 한 곳에서 모든 설정을 사용하고 싶습니다.

1

분명히 여러 가지 방법으로 당신은 추상적 인 supermethod를 필요로 할 것입니다. 그렇지 않으면 당신은 스스로를 반복 할 것입니다. 그러나 이것은 나쁜 것으로 간주됩니다. 그러나 때로는 다음과 같은 방법을 사용하는 것이 좋습니다. 별칭 또는 shorthands (수정 $.ajax() 울어 위해 즉, jQuery를 $.getJSON()를 참조) spechial의 경우 또는 선택적 매개 변수의 많은 경우 같은 당신은을 사용하는 것에 대한 더 많은 매개 변수와

하나 개의 방법이 정말 유연하지 options 객체를 참조하십시오.

정말 유스 케이스와 필요한 유연성/재사용 가능성이 있습니다. 개인적으로 나는 항상 옵션 매개 변수 접근과 함께 하나의 방법으로 갈 것입니다.

1

어떻게 최대의 유연성을위한 JSON 옵션과 함께 "supermethod"을 가지고, 그리고 아마 더 엄격하게 정의 된 매개 변수 일부 래퍼 방법이 가장 일반적으로 사용되는 기능에 쉽게 액세스 할 수 약.

관련 문제