2011-12-06 8 views
0

입력으로 구성 설정이 필요한 기능이 있다고 가정하지만이 기능은 최상위 'main'기능에서 몇 단계 깊이라고합니다.'깊은'구성 옵션을 설정하는 가장 좋은 방법은 무엇입니까?

최상의 프로그래밍 방법으로이 설정을 기능에 전달하는 가장 좋은 방법은 무엇입니까?

한 가지 방법은 전역 변수를 사용하고 최상위 함수에서이를 설정하고 대상 함수에서 읽는 것입니다.하지만 나쁜 프로그래밍 연습으로 간주됩니다.

또 다른 방법은 설정을 인수에서부터 여러 중간 함수를 통해 최종 대상 함수까지 줄곧 전달하는 것입니다. 이것은 매우 지루하고 오류가 발생하기 쉬운 것처럼 보입니다.

다른 접근 방법이 있습니까?

귀하의 답변에 귀하가 선택한 언어를 사용할 수 있지만 참고로 저는 C/C++, Perl 및 Matlab을 사용하고 있습니다.

+0

R은 좋은 노력을 기울여 전달할 수있는 멋진'...'을 가지고 있습니다. –

+1

최상위 함수가 매우 깊게 중첩 된 함수에 이러한 구성 옵션이 필요하다는 것을 아는 이유는 무엇입니까? – Xeo

+0

"실제 시스템에는 톱이 없습니다"- Bertrand Meyer –

답변

0

matlab에는 항상 모든 매개 변수를 설정하는 allParam.m 스크립트가 있습니다.

함수에 이러한 매개 변수 중 하나가 필요한 경우 스크립트를 호출하면 설정됩니다.

2

딥 호출 스택이있는 프로 시저 프로그래밍 스타일을 유지하면 대답이 진부하게됩니다.

현대적인 객체 지향을 활용하도록 프로그램을 재구성하십시오. Perl roles make for flat hierarchies. 구성은 단지 하나의 속성입니다.

+0

어떤 프로그래밍 스타일을 사용하든 모든 사람이 사용해야하는 최상위 매개 변수가 항상 존재하지 않습니까? 위의 예에서 GSM 또는 CDMA 시스템에 대한 시뮬레이션을 실행한다고 가정 해보십시오. 시스템의 모든 기능 및/또는 객체가 이것이 GSM 또는 CDMA 시뮬레이션임을 알 필요가 있습니다. 이것을 처리하는 가장 좋은 방법은 무엇입니까? – eyio

+0

아마도 전역 변수를 가질 수있는 방법이있을 수 있습니다.하지만 전역 변수를 사용하지 않고도 동일한 결과를 얻을 수있는 방법이 있습니다. 그들은 여러 언어로 필요하지 않습니다. –

1

내가 사용하는 시스템은 Publish-Subscribe (Observer Pattern) 구현을 사용하여 설정/구성 변경 사항을 알 필요가있는 객체에 전파합니다. 필요

object (선택된 original Gang of Four description의 가입자 또는 관찰자)의 설정 변경을 통지한다 : 가입자에서

  1. 상속한다.
  2. 게시자의 연결 방법을 통해 게시자에게 자신을 (구독) 첨부합니다.
  3. 설정/구성이 변경 될 때마다 게시자가 알립니다.

필요에 따라 설정/구성 데이터에 variant that allows Subscribers to poll Publishers을 사용합니다.

게시 - 구독 패턴을 사용하면 설정을 관리하는 개체와이를 필요로하는 개체 간의 연결을 최소화 할 수 있습니다.

3

구성을 위해 singleton objects을 좋아합니다. 하나의 인스턴스 만 있어야하는 공유 리소스입니다. 새 객체를 만들려고하면 기존 객체를 얻습니다. 전역 변수 나 서브 루틴 또는 메소드 매개 변수에 대해 신경 쓰지 않아도됩니다. 새로운 구성 객체를 얻고 필요한만큼 사용할 수 있습니다.

C++의 Gang of Four에 예제가 있습니다.

+0

젠장. 15 분 동안 애들을 먹이로 산만 해졌고 당신은 그 해답을 떠올 렸어. :) – DVK

관련 문제