2011-10-14 2 views
5

는 스위치 케이스를 가지고있는 기능이있다 그리고 우리는 조금 덜 될 것는 스위치 케이스 문 된 Cyclomatic 복잡성을 줄이는 방법을

 string data = string.empty; 
     switch (value) 
     { 
      case "Less than 2 billion": 
       data = "0 - 2B"; 
       break; 
      case "2 billion to 10 billion": 
       data = "2B - 10B"; 
       break; 
      case "10 billion to 20 billion": 
       data = "10B - 20B"; 
       break; 
      case "20 billion to 50 billion": 
       data = "20B - 50B"; 
       break; 
      case "Greater than 50 billion": 
       data = "> 50B"; 
       break; 
      case "N/A": 
       data = "N/A"; 
       break; 
      case "[items] > 0": 
       data = string.Empty; 
       break; 
     } 
     return data; 
+1

IMHO CC는 원칙적으로 가이드 라인이 될 수없는 척도입니다. switch 문은 더 높은 CC를 제공하지만 실제로 여기에 유지 관리 문제가 있습니까? – FuleSnabel

+4

그러나 CC를 사전으로 대체하여 CC를 줄이면 유지 보수성이 크게 향상됩니까 아니면 단순히 CC를 줄이는 것입니까? 내 경험으로. 이러한 종류의 switch 문을 사전 조회로 대체 할 때마다 응답은 다음과 같았습니다. "switch 문이 더 마음에 들었습니다." 누가 유지 보수 가능성에 대해 옳은가? CC 측정 항목 또는이를 유지 관리하는 개발자? – FuleSnabel

+0

사전으로 바꾸면 덜 복잡해지며 다른 곳에서 노력하는 것이 나을 것입니다. 그러나 하드 코딩 된 문자열 (예 : "Less than 20 billion"및 "0 - 2B")은 걱정 스럽지만 유지 관리를 위해서는 실제로 상수 여야합니다. 참고 그냥 데이터를 반환하는 경우 각 경우에 휴식이 필요하지 않습니다 그냥'return "0-2B";을 수행합니다. – Joey

답변

7

당신은이 경우에 사전 조회를 사용할 수는 CC 줄일 필요 코드와 명확한.

+0

저는 Dictionary 을 사용했습니다. 그러나 CC는 1이지만 동일한 함수인지 알고 싶습니다. 여러 위치에서 호출되는 경우 모든 호출에서 사전을 생성하므로 성능에 영향을 미칩니다. –

+2

대부분의 경우 사전을 정적 멤버로 사용하여 한 번만 초기화 할 수 있습니다. – FuleSnabel

2

당신이

private Dictionary<EnumType, Action<param1Type,param2Type,etc> strategies = 
new Dictionary<EnumType, Action<param1Type, param2Type, etc>(); 

처럼 뭔가를 할 수 ...

private void LoadDictionary() 
{ 
strategies.Add(enumType.Option1, Method1); 
strategies.Add(enumType.Option2, Method2); 
... 
} 

...

private void Method1(param1Type param, param2Type param2, etc) 
{ 
// your specific logic here 
} 

그리고 당신은 다음과 같이 사용 :

public void DoSomethingDependingOnCase(enumType option, param1Type param1, param2Type param2) 
{ 
strategies[option].Invoke(param1,param2,etc); 
}