0

일부 양식과 컨트롤이 포함 된 winforms 프로젝트를 작성 중입니다. 각각은 4 개 언어로 번역됩니다. 유지해야 할 악몽 인 "PropertiesForm"이라는 폼이 있습니다 : 탭 페이지가 6 개인 탭 콘테이너와 100 개 이상의 콘트롤을 가지고 있습니다. 더러운 코드로 모든 것을 일관성있게 유지하려고 노력합니다.깨끗한 사용자 인터페이스 코드로 돌아가는 방법은 무엇입니까?

저는이 프로젝트를 담당하고 있으므로이 양식을 크게 수정하는 것을 피하려고했지만 더 이상 사용할 수 없습니다. 큰 변화를 만드는 것은 어렵고 느리고 안정성 문제를 일으킬 수 있습니다. 따라서 깨끗하고 이해하기 쉬운 코드를 복원하는 가장 좋은 방법은 무엇입니까?

제 아이디어는 각 탭 페이지에 대해 적어도 하나의 컨트롤을 만들고 폼에서 동기화하는 것입니다. 내 문제는 내가 Visual Studio로 그렇게하는 간단한 방법을 모른다는 것입니다. 복사 - 붙여 넣기가 사라지기 때문에 번역 및 이벤트 처리기를 새 컨트롤에 유지하는 자동 방법이 있습니까? 이 작업을 위해 고안된 도구 나 추가 기능이 있습니까?

모든 것을 손상시키지 않고 구조를 정리하는 방법은 무엇이되어야합니까?

답변

1

내가 아는 한, 그런 도구는 없으며 어떤 원칙이 존재해야하는지 알지 못합니다.

나는 단지 6 개의 사용자 정의 컨트롤을 만들고 해당 컨트롤의 각 탭 페이지에서 컨트롤을 잘라내어 새로 만든 컨트롤에 붙여 넣습니다. 그 후에 각 UserContols에 오류가있는 함수를 디스패치하여 모든 오류를 수정합니다. 그러나 탭 컨트롤이 서로 다른 탭의 다른 탭 컨트롤과 연결된 경우 일부 "문제"가 발생할 수 있습니다.

다른 접근법은 논리적으로 사용자 컨트롤 (날짜/시간 컨트롤, 텍스트 컨트롤, 비즈니스 개체 컨트롤)을 구분하는 것입니다.

그러나 이벤트 처리기 및 기타 물건을 스스로 해결해야 할 필요가 있습니다.

1

당신은 이미 잘못된 점과 그것을 고치는 법을 알고 있습니다 : 느슨하게 결합 된 작은 구성 요소를 모두 망가 뜨리고 양식이 함께 작동하도록하십시오.

Model-View-Controller 패턴을 살펴보십시오. 어쩌면 각 구성 요소에 대해 별도의 컨트롤러를 만드는 것이 좋은 생각이며, 큰 폼에는 작은 구성 요소를 제어하는 ​​자체 컨트롤러가 있습니다. 알맞은 이벤트 처리에 중요합니다. 컨트롤 이벤트에 연결하지 말고 컨트롤러 이벤트에 연결하십시오.

0

이러한 수정은 디자인 편집기가 아닌 코드에서 수행해야합니다. 복사 - 붙여 넣기가 문제를 일으키기 시작한다고 말하면서 : desing 편집기는 디자인/레이아웃을 만드는 것이지만 뒤에있는 코드를 처리하는 데는 적합하지 않습니다.

6 개의 탭 페이지를 6 개의 다른 파일로 나누고 실제 파일을 1 개의 파일로 분리하는 것이 좋습니다. 그런 다음 코드를 빠르게 살펴보고 일반적인 패턴 (기능적 또는 논리적 (즉, 다시 나타나는 것처럼 보이는 특정 컨트롤 그룹 또는 많이 사용되는 특정 코드 구조)을 찾을 수 있는지 확인하십시오. 그들을 추출하고, 별도의 수업에 배치하고 원본 파일에 적용하십시오. 전형적인 예는 컨트롤 모자가 특정 스타일이 적용되고 두 번 이상 사용됩니다 : 스타일을 관리하는 전용 클래스/함수를 가져와야합니다.

한편 단계를 문서화하고 테스트 기능을 유지하십시오.

또한 매우 중요합니다 (질문에 대해서는 이야기하지 않지만 아마도 거기에있을 것입니다). 기본 데이터 구조/데이터베이스/파일과 데이터를주고받는 방식입니다.데이터와 UI 사이의 통신을 처리하고 모든 컨트롤이이를 사용하도록 애플리케이션 용도로 전용 표준화 된 서비스를 제공해야합니다. UI, 데이터베이스 또는 둘 다를 리팩토링하도록 선택한 경우 해당 통신 논리를 변경할 필요가 없다면 올바른 방법이라고 생각할 것입니다.