문제

ASP.NET 프론트 엔드 사이트로 구성된 매우 간단한 응용 프로그램이 있으며 WCF Windows 서비스가 무거운 리프팅 백엔드 로직을 수행합니다.

사용자는 일부 매개 변수를 선택하고 '제출'버튼을 눌러 간단한 페이지가 하나 있습니다. 페이지는 WCF 서비스를 호출하여 매개 변수를 전달합니다. 서비스는 '작업'클래스의 인스턴스를 인스턴스화하고 매개 변수를 생성자에게 보내는 다음 'run ()'메소드를 호출하여 사용자 이름, 시간이있는 '작업'레코드를 데이터베이스에 삽입하는 모든 작업을 수행합니다. 시작 등은 ... 제 3 자 공급 업체에게 요청하고 데이터를 가져 와서 데이터베이스에 넣고 다른 비즈니스 로직을 수행 한 다음 작업을 완료 한 것으로 표시합니다.

그런 다음 사용자는 이제 자신의 작업을 검색 할 수있는 두 번째 간단한 페이지 (날짜별로 정렬 된 검색 가능한 콤보 상자, 해당 작업과 관련된 여러 필드를 표시 한 다음 화면에 해당 작업에 해당하는 데이터를 표시 할 수 있습니다. 작업 테이블의 필드, 예를 들어 시간, 완료된 시간, 상태 등이 패널에 레이블로 표시) 및 타사 공급 업체 (패널 아래 그리드로 렌더링)에서 가져온 실제 데이터.

이제 내 질문에 - 그래서 나는 위에서 언급 한 모든 필드가 공개 run () 방법 및 생성자와 함께 구인 수업이 있습니다. 그것은 몇 가지 간단한 개인 기능과 iparser, ivendorconnection, idataaccess와 같은 클래스의 인터페이스 인 몇몇 개인 멤버가 있습니다. 실제 작업, 거의 대표단은 복합 객체에 대해 일합니다 (무엇보다도 좋은 테스트 가능성을 만듭니다).

이제이 작업 수업에는 3 가지 가능한 용도 / 상태가 있습니다. 문자 그대로 작업을 실행하기 위해 Run () 함수를 사용하기 위해 서비스 내부입니다. 또한 위에서 설명한 패널의 모델 역할을하는 두 가지 다른 용도도 있습니다. 위에서 설명한 콤보 상자의 모델 역할을합니다. Job Class에는 3 개의 공개 생성자가 있으며, 각 구성원은 3 개 주 중 하나를 위해 설정합니다. 모든 경우에, 각각의 다른 '상태'는 다른 2 개 상태가 신경 쓰지 않는 특정 구성원에 대해 관심을 갖습니다. 경우에 따라 일부 구성원 중 일부는 3 개 주 모두에서 사용됩니다. '콤보 박스 상태'가 가장 간단합니다.이 경우 3 개의 readonly 필드 만 원합니다. '패널 상태'에서 나는 6 개의 Readonly Fields에 관심이 있습니다.

나는 이것을 할 수있는 더 깨끗한 방법을 찾고 있습니다. State A에서 구인을 인스턴스화하면 I 알다 액세스 멤버 X는 작동하지 않거나 함수 Y 호출은 실패합니다. 그러나 여전히 컴파일 가능한 코드입니다.

나는 다른 사람들이 전에이 문제에 직면했다고 확신합니다. 나는 Mustinherit/Abstract로 표시된 기본 직업 수업을 가지고 있고 각 주마다 하나씩 3 개의 파생 클래스를 가지고 있다고 생각했습니다. 공유 된 멤버를 기지에 넣고 국가 별 회원을 파생에 넣고 적절한 경우 내 코드에 파생 클래스를 사용하십시오. 이것은 내 목적을 위해 충분히 간단 해 보이고 내 문제를 해결합니다. 어쩌면 나는 또한 어떤 종류의 jobfactory를 가질 수있을 것입니다 ... 나는 다른 사람들이 상자 밖에서 충분히 생각하지 않는 것처럼 다른 사람들이 이것을 어떻게 해결했는지를 찾고 있다고 생각합니다 ... 나는 내 수업이 많은 수업을 내에서 주 머신을 가졌습니다. 애호가 게임 개발 일 - 그러나 그 수업의 사례가 상태를 바꿀 수 있기 때문에 (예 : '적'클래스는 상태가 'Attack_Mode에서'Waiting '으로 변경 될 수 있기 때문에), 변화하는 상태는 없습니다. 일단 창조되면, 직업은 그 상태에 머물러야하며 다른 일을하지 않아야합니다. 주어진 상태에 있지 않은 상태에서 메소드/멤버를 사용하는 경우 상태 추적 및 던지기 예외는 부서지기 쉬우 며 너무 많은 작업이 보입니다. 이 문제를 어떻게 해결했는지에 대한 제안이 있습니까? 그리고 내가 과잉하려고하는 일입니까? 직업이 점점 더 다른 상태를 얻기 시작했다면, 나는 생각하지 않을 것입니다. 그러나 어쩌면 그것이 많은 다른 상태를 얻었다면 어쨌든 다른 수업으로 나누는 것을 생각해야합니다 ... 단지 2 센트를 찾고 있습니다.

도움이 되었습니까?

해결책

3 개의 파생 클래스로 단일 기본 클래스 작업을 만드는 아이디어는 내가하는 일과 똑같이 들립니다. jabfactory를 만드는 것은이 디자인에 더 도움이 될 수 있습니다. 특정 상황에서 객체의 일부가 사용되지 않거나 불법으로 사용되지 않는 객체를 만드는 것은 나쁜 관행 일 수 있습니다. 따라서 필요한 부품만으로 파생 클래스를 만드는 것이 분명히 더 나은 디자인입니다. 과잉이 아닙니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top