이 가상의 예는 내가 계속 노력하고 있어도 과거에 얻을 수없는 몇 가지 문제를 보여줍니다 !! ... 원래 코드가 사용자가 그리드의 셀을 클릭 할 때 트리거되는 UI로 코딩 된 긴 이벤트 핸들러라고 가정합니다. 의사 코드로 표현 그건 : "! 아,이 코드는 디버깅을 쉽게 이해하기 쉬울 것이다 전략 패턴에 리팩토링, 쉽게 나중에 확장"이 코드를 어떻게 리팩토링합니까?
if Condition1=true then
begin
//loop through every cell in row,
//if aCell/headerCellValue>1 then
//color aCell red
end
else if Condition2=true then
begin
//do some other calculation adding cell and headerCell values, and
//if some other product>2 then
//color the whole row green
end
else show an error message
나는이보고 말 알 겠어.
그리고 코드를 여러 절차로 쉽게 구분할 수 있습니다.
문제는 궁극적으로 범위와 관련이 있습니다. 가상 코드가 격자 속성, 셀에 표시된 값을 광범위하게 사용한다고 가정하고, 심지어 내장 된 격자 방법까지도 가정합니다. UI에서 그리드 구성 요소를 참조하지 않고 어떻게 다른 유닛으로 이동합니까? OOP를 가치있게 만드는 느슨한 결합에 대한 모든 "규칙"을 깨뜨릴 수 있습니까? ...
정말 응답을 기다리고 있습니다. 감사합니다. 언제나처럼 - Al C.
똑같은 표를 같은 방식으로 나타내야 할 필요가있는 경우 동일한 규칙을 존중하고 여러 양식에서 코드를 독립적 인 단위로 옮기는 것이 좋습니다. 허락한다면, 그리드를 프레임에 넣고 프레임을 재사용하면 같은 목적을 달성 할 수 있습니다 ...하지만 프레임의 큰 팬이 아닙니다. –
@Ken, "여러 줄의 동일한 격자 ..."는 모순입니다.하나의 컨트롤은 두 가지 형태로 존재할 수 없습니다. 동일한 방식으로 처리해야하는 두 개의 그리드를 가질 수 있지만 여전히 두 개의 다른 컨트롤이며,이 시점에서 일반적인 처리를 별도의 루틴으로 분해 할 가치가 있습니다. –
"눈금"을 "일부 시각적 컨트롤"이 아닌 "데이터보기"로 읽습니다. 나는 그리드의 정의가 후자에 국한 될만큼 길게 프로그램하지는 않았지만 모호함을 지적 해 주셔서 감사합니다. 일부 사람들은 그 점을 이해하지 못할 것이라고 생각하지 않았습니다. –