2013-08-31 5 views
0

숫자 문제를 해결하는 주 수업이있는 곳에 문제가 있습니다. 단순화를 위해 Ax=b을 해결한다고 가정합니다. 이제는 사용자가 해결 방법을 선택할 수있는 권한을 부여하겠습니다. 수천 가지 옵션이 있으며 각 옵션에는 수천 가지 옵션이 있습니다.중첩 클래스 - 좋은 디자인?

내 생각은 메인 클래스를 만든 다음 각 메소드에 대한 하위 클래스를 만들고 하위 클래스로 각 메소드 (상속을 통해 상호 작용할 수 있음)를 하위 서브 클래스로 만듭니다.

는 예를 들어, 나는 사용자가 다음 Model.method='CG'Model.preconditioning=offModel.Solve로 삼았 무언가를하고 Model 클래스에서, 실행 CG 서브 클래스가 직시. CG 내에는 전처리가 켜지거나 꺼지는 방법에 따라 실행되는 방법 CG_PrecondCG_NoPrecond이 있습니다. (이 방법은 크게 다르다고 가정). 따라서 본질적으로 사용자는 Model.CG.CG_NoPrecond을 실행 중입니다.

좋은 디자인인가요? 중첩 클래스는 피해야합니까?

중요한 점은 Model 클래스 이외의 모든 하위 클래스에는 메서드 만 포함되며 반환되는 것 이외의 자체 데이터는없는 것입니다.

나는 정말 좋은 답변을 몇 시간 동안 보냈고 나의 문제는 받아 들여지는 대답의 요구 사항과 맞 춥니 다 (Why/when should you use nested classes in .net? Or shouldn't you?).

+0

Strategy (http://sourcemaking.com/design_patterns/strategy) 디자인 패턴이 필요한 것처럼 보입니다. – LordDoskias

+0

클래스에 'ModelSettings'구조체에 필요한 정보를 제공하는 것이 더 쉬울 수도 있습니까? – Tharwen

+0

그래서 문제를 해결할 수있는 방법의 트리가 있습니다. 나무에는 수천 개의 가지가 있으며 깊이는 3입니다. 어떻게 든 나무를 생성해야 할 것입니다. 중첩 된 클래스가 당신이 언급 한 다른 방법보다 훨씬 읽기 쉬울 것 같습니다. – Dru

답변

0

먼저 Solver 클래스를 만들고 전략 패턴을 사용하여 문제를 해결하는 여러 가지 방법을 나타내는 하위 클래스를 만들어야합니다.

옵션과 하위 옵션을 올바르게 수행하는 것이 더 어렵습니다. 내가 맞다면 CG_PrecondCG_NoPrecondCG (서브 클래스는 Solver 임)의 하위 클래스 여야합니다. 서브 클래스는 내부 논리를 공유하는 것처럼 보입니다.

옵션이 다른 방법에 대해 미리 정의 된 값과 같으면 각 방법에 다른 값과 값 유형이 필요하므로 더 어려워집니다. 여기에 옵션, 하위 옵션 등의 몇 가지 예제를 제시해주십시오.