2011-04-25 2 views
6

빠른 정신병 체크가 필요합니다. 나는 그들이 깨끗하고, 간결하며, 어떤 종류의 조건 논리와도 자유 롭다는 것과 같은 견해를 디자인하려고 노력하고있다. 그러나, 나는 그들을 모두 조건문을 ridding 힘든 시간 보내고있다. 보기에 일부 조건문을 사용하는 것이 불가피한 지 궁금합니다. 예를 들어뷰의 조건문이 나쁜 소식입니까?

:

@if (Model.UserCanEdit) 
{ 
    <button type="button" id="Edit">Edit</button> 
} 

변경하거나 다양한 조건에 따라/숨김 표시 여러 요소가 볼 수있는 경우 여러 옵션이 없습니다.

그래서보기에서 조건부 논리를 허용 할 때 선을 그릴 위치는 어떤 지침을 따라야합니까? 내가 생각하지 않을 수도있는 내 견해에서 조건 논리를 감소시키는 몇 가지 방법은 무엇입니까?

미리 감사드립니다.

답변

10

뷰의 모든 주요 목적이 실제로 모델의 데이터를 표시 한 후에 모두 나쁘다는 것은 아닙니다. (그리고 몇 번 조건문은 데이터를 표시해야합니다.)

을하지만 - 유지 보수에게 악몽 결국 가독성을 할 수 조건문의 풍부를 사용하여. 은 범위가 비즈니스 로직이되는 조건부를 포함하지 말고 은 "프리젠 테이션 로직"으로 목적을 달성 할 수 있도록합니다.

가능한 대안 :

사용자 정의 HTML 헬퍼 :

당신은 조건문을 사용하는 방법에 대한 미친하지 않은 경우 - 당신은 약간의 물건을 정리하기 위해 도우미를 사용하여 조사 할 수 있습니다.그에 대한 자세한 내용은 Creating Custom HTML Helpers.

다른 이미지보기/부분보기 체크 아웃 : 또한

을 같은 많은 사람들이 지적 할 것이다 - 여러 뷰해야이하는 가장 좋은 방법이 아닌 하나의보기 기능을 만들기 위해 조건문을 사용하여 그 문제를 해결하십시오.

+2

+1 두 번째 단락. 조건부에 따라 단순히 프리젠 테이션 로직 일 수 있습니다. 뷰는 필요한만큼의 로직을 가져야하며 뷰를 결정하는 모든 매개 변수는 더 낮은 레벨로 전달 될 수 있다고 주장 할 수 있습니다. 결국 하나의 선택 사항에 아무 것도 표시하지 않더라도 표시 할 두 가지 데이터 중 하나를 선택하면보기에 모든 경우에 실제로 필요하지 않은 데이터가 표시됩니다. – corsiKa

1

최상의 시나리오에서는 가능한 한 많이 피하십시오. 그들은 꽤 간단하지만 나중에 스파게티 코드로 변할 수 있습니다. 항상 가능한 것은 아니며 당신이해야 할 일이 거의 불가피하다고 말합니다.

일반적으로보기를 분할하거나 (여러 부분보기가 있음) 컨트롤러에서 if/else 비트를 결정합니다. 이렇게하면 ViewModel도 다르게 유지됩니다.

- 내 경험에서 엄지 손가락의 규칙으로

, 나는 항상 오히려 기술보다 뷰의 비즈니스 관점을 이해하려고합니다. 때로는 두 개의보기가 매우 비슷해 보일 수도 있습니다. 지금은이며, 서로 구분하려면 if/else가 필요하지만 비즈니스 측면에서는 서로 다르므로 각 줄마다 여러 가지 새로운 요구 사항이 렌더링 될 것입니다. 그것은 다른 시각과 완전히 다릅니다. 비즈니스 관점에서 볼 때 두 가지 모두에 대해 별도의 뷰와 뷰 모델을 만들어야합니다.

3

코드에서 많은 확인은 하나의보기가 두 개의 별도보기로 동작하도록하려는 것일 수 있습니다.

컨트롤러 수준에서 하나의 검사를 수행 한 다음 적절하게 조정 된 모델을 사용하여 다른보기를 렌더링하는 것이 좋습니다. 이렇게하면 각보기가 '벙어리'상태로 유지되고 필요한 것보다 많은 정보를 전달할 수 없습니다.

질문에 직접 대답하려면 이론적으로 각 상태에 대한 별도의보기를 사용하여 '모든'조건부 검사를 피할 수 있는지 확인하십시오. 그러나 여러 유사한 목적에 적합하고 조건부가있는보기를 가질 수 있지만 읽기 가능한 코드를 유지하는 것은 불합리하지 않습니다.

+0

두 가지 관점 중 하나의 문제인 경우이를 고려할 것입니다. 그러나 가능한 조건의 조합의 수는 종종 두 가지 이상입니다. 예를 들어, 몇 가지 다른 링크 동작이있는 뷰를 상상해보십시오. 각 동작은 단계별 권한 수준을 기반으로 표시됩니다. 권한이 많을수록 뷰에서 더 많은 작업을 수행 할 수 있습니다. 다시 한번, 여러 가지 조건이보기 전체에 산재 해있는 것을 피할 방법이 실제로는 없습니다. –

+0

Jerad Rose - 프로젝트를 관리자, 소유자, 멤버 등의 영역으로 분리 할 수 ​​있습니다. 그렇지 않은 경우 헬퍼를 사용하는 솔루션이 위에 언급되었습니다. – Alex