2010-06-11 4 views
1

컨트롤을 작성하고 도구를 사용하여 코드 분석을 수행했습니다. 내가 통과하지 못했던 시험이있다. 과도한 지역 주민 인 http://msdn.microsoft.com/library/ms182263(VS.90).aspx을 피하십시오.ASP.NET의 로컬 변수가 너무 많습니다.

내 CreateChildControls 함수에서 많은 필드가있는 큰 테이블을 만들었습니다. 테이블을 생성하기 위해 TableRow와 TableCell을 많이 생성해야합니다. 그러나 이것들은 통제의 밭이나 속성이 아닙니다. Thery는 함수에서 동적으로 생성되는 지역 변수입니다.

이러한 TableCell과 TableRows를 컨트롤의 필드로 만들어야합니까? 아니면 CreateChildControl 함수의 로컬 변수로 유지할 수 있습니까?

최고 감사합니다, 모두의

+0

코드를 게시 할 수 있습니까? – echo

+0

코드는 @codeka를 아래에 붙여 넣은 것과 같습니다. 그러나 나는 지역 변수를 재사용하지 않는다. –

답변

1

첫째, 난 당신이 Repeater 컨트롤을 사용하는 대신에 동적으로 백엔드 코드의 행 많은 세포를 만드는 것이 좋습니다 제안했다. Repeater을 사용하면 수백 줄의 코드를 탐색하지 않고도 실제 마크 업을보다 쉽게 ​​수정할 수 있습니다.

하지만 옵션이 아니라면 다음 질문을 고려하십시오. 은 각각 고유 한 변수가 필요합니까? 대신 같은 것을 할 수 없습니다 :

입니다
TableRow tr; 
TableCell tc; 

tr = new TableRow(); 
tc = new TableCell(); 
tc.Text = "whatever"; 
tr.Cells.Add(tc); 
table.Rows.Add(tr); 

tr = new TableRow(); 
tc = new TableCell(); 
tc.Text = "whatever # 2"; 
tr.Cells.Add(tc); 
table.Rows.Add(tr); 

, 여러 행/셀의 같은 변수를 다시 사용합니다.

+1

대부분의 경우 나는 tr 및 tc와 같이 지독한 이름을 가진 재사용 된 로컬 변수가 whateverRow 및 anotherRow와 같은 더 나은 이름을 가진 추가 로컬 변수보다 훨씬 덜 읽을 수있는 코드를 만든다고 주장합니다. – dahlbyk

+0

@dahlbyk : 그건 사실 일 수도 있습니다. 솔직히 말해서, 나는 대신에 "Repeater'를 사용하는 것만으로도 대답을 떠날 생각이었습니다. 장기적으로는 더 나은 조언 일 것입니다. –

+0

리피터를 사용할 필요가 없습니다. 테이블은 양식과 같아서 데이터를 표시하는 것이 아닙니다. –

0

코드 분석 규칙은 항상 지침으로 사용해야합니다. 규칙을 위반하는 솔루션에 만족하는 경우 예외를 추가하고 더 어려운 문제로 이동하십시오.

즉, 지역 변수를 제거하는 것은 원하는 로직을 구현하기 위해 메소드 (및 적절한 경우 클래스)를 추출하는 것처럼 쉽습니다. 귀하의 경우에는 각각 TableCell을 구성하는 다른 메소드를 호출하는 TableRow을 생성하는 메소드가있을 수 있습니다. 이는 CreateChildControls 메소드를 읽고 테스트하기가 더 쉬워지는 추가적인 이점이 있습니다.

업데이트 : 변수를 필드로 승격시키는 것에 대한 질문에 대답하려면 절대적으로 필요한 경우가 아니면 필드를 피하는 것이 좋습니다. 이 경우에는 보이지 않으므로 관련 방법 내에서 로컬로 유지하는 것이 좋습니다.

관련 문제