2011-06-10 5 views
0

asp.net 페이지에서 작업 중이며 숫자 값을 기반으로 html을 출력해야합니다.C# 조건부 및 포함 논리 흐름 구조

논리 따라서 경우 : ReferenceCount 초과 13

경우 출력 사업부 -1 : ReferenceCount가

Html.RenderPartial("Tweet", Model.tweets.FirstOrDefault()); 

보다 큰 경우 (16), 후 출력 사업부-1 사업부-2 : ReferenceCount보다 큰 17

Html.RenderPartial("Tweet", Model.tweets.FirstOrDefault()); 
Html.RenderPartial("TShirt", Model.tweets.FirstOrDefault()); 

경우 출력 사업부-1 사업부-2 사업부-3 :

Html.RenderPartial("Tweet", Model.tweets.FirstOrDefault()); 
Html.RenderPartial("TShirt", Model.tweets.FirstOrDefault()); 
Html.RenderPartial("Banner", Model.tweets.FirstOrDefault()); 

ReferenceCount는 22보다 큰 후 출력 사업부-1 사업부-2 사업부-3 사업부-4 인 경우 27 개 이상의 평가의 총

Html.RenderPartial("Tweet", Model.tweets.FirstOrDefault()); 
Html.RenderPartial("TShirt", Model.tweets.FirstOrDefault()); 
Html.RenderPartial("Banner", Model.tweets.FirstOrDefault()); 
Html.RenderPartial("Tweet", Model.tweets.FirstOrDefault()); 

등 ....

누구나 가능한 한 효율적으로이 논리 흐름을 구조화하는 데 좋은 아이디어가 있습니까?

나는 if 문이 너무 많지 않으므로 여러 가지 Case 테스트를 통과 할 수있는 Switch 문을 고려했지만 Case 문에서는 표현식을 사용할 수없는 것처럼 보입니다. C# 스위치.

감사합니다, 스콧

답변

1

, 당신은 추상적이 떨어져이 같은으로한다 : 뭔가 변경하는 경우

class TweetSetting 
{ 
    public int MinReferenceCount { get; protected set; } 
    public string ViewName { get; protected set; } 

    public TweetSetting(int minReferenceCount, string viewName) 
    { 
     MinReferenceCount = minReferenceCount; 
     ViewName = viewName; 
    } 
} 

… 

var settings = 
    new[] 
    { 
     new TweetSetting(13, "Tweet"), 
     new TweetSetting(16, "TShirt"), 
     new TweetSetting(17, "Banner"), 
     new TweetSetting(22, "Tweet") 
    }; 

var referenceCount = …; // whatever 

foreach (var setting in settings) 
{ 
    if (referenceCount <= setting.MinReferenceCount) 
     break; 

    Html.RenderPartial(setting.ViewName, Model.tweets.FirstOrDefault()); 
} 

이 방법, 당신은 단지 settings을 수정합니다. 더 나은 점은 설정 파일에서 코드를로드 할 수 있고 수정하면 코드를 전혀 변경하지 않아도된다는 것입니다.

+0

감사합니다. 이것은 위대합니다. 그러나 네트워크 문제가있는 경우 Model.tweets이 null 일 수 있습니다. 어떻게 처리 할 수 ​​있습니까? 어떤 아이디어? – Scott

0

각 문에 그냥 여분의 줄을 추가하는 경우는, 나는이

if (refcount > 13) 
    Html.RenderPartial("Tweet", Model.tweets.FirstOrDefault()); 
if (refcount > 16) 
    Html.RenderPartial("TShirt", Model.tweets.FirstOrDefault()); 
if (refcount > 17) 
    Html.RenderPartial("Banner", Model.tweets.FirstOrDefault()); 
if (refcount > 22) 
    Html.RenderPartial("Tweet", Model.tweets.FirstOrDefault()); 

처럼 너무 자신을 반복하지 않는 그런 식으로 뭔가를 할 것입니다. 당신이 정말로이 패턴이 있으면

+0

그래, 내가 생각하는 것 같아. 감사. – Scott

+0

나는'Model.tweets.FirstOrDefault()'를 첫 번째 조건 앞에 변수 앞에 배치하여 경쟁 조건에 취약하게되지 않도록합니다. 그렇게하면 자신을 너무 많이 반복하지 않게됩니다. :) –

+0

예, 고마워요. 그 예제를 너무 빨리 붙여 넣었습니다. 나는 실제로 각 항목에 트윗을 전달하지 않을 것입니다. 아마도 각 그룹마다 다른 ViewModel 클래스를 사용하므로 추가 데이터를 쉽게 전달할 수 있습니다. – Scott