대용량 응용 프로그램 (WinForm 및 WebApp) 개발을 시작하기 전에 클래스 디자인부터 어떻게 시작할 수 있습니까? 클래스 구조를 설계하기 전에 내가 알아야 할 초기 '주의해야 할 사항'은 무엇입니까?엔터프라이즈 애플리케이션의 클래스 디자인을 시작하는 방법은 무엇입니까?
내 응용 프로그램 디자인에서 인터페이스, 추상 클래스, 델리게이트, 이벤트 등의 사용법을 식별하는 방법은 무엇입니까?
대용량 응용 프로그램 (WinForm 및 WebApp) 개발을 시작하기 전에 클래스 디자인부터 어떻게 시작할 수 있습니까? 클래스 구조를 설계하기 전에 내가 알아야 할 초기 '주의해야 할 사항'은 무엇입니까?엔터프라이즈 애플리케이션의 클래스 디자인을 시작하는 방법은 무엇입니까?
내 응용 프로그램 디자인에서 인터페이스, 추상 클래스, 델리게이트, 이벤트 등의 사용법을 식별하는 방법은 무엇입니까?
이 질문에 대한 답변을 얻으려면 StackOverflow 게시물이 아닌 책이 필요합니다. 사실, 마틴 파울러 (Martin Fowler)의 Patterns of Enterprise Application Architecture과 같은 책이 이미 상당수 있습니다. 일반적인 포인터는 다음과 같습니다.
작업중인 문제 영역의 일부를 이해했는지 확인하십시오. 먼저 고객과 이야기를 나눠서 물건을 실행 했습니까? 도메인 모델이 세계에 대한 생각과 일치합니까?
통계적으로 말하면 응용 프로그램은 특별하지 않을 수 있습니다. 즉, 누군가가 작동하도록 특정 아키텍처 또는 구현 패턴 (예 : 엔터프라이즈 서비스 버스, 메시지 큐 등)이 필요하다고 주장하는 경우 회의적인 시각으로이를보아야합니다. 다른 접근법이 더 좋지 않을지 생각해보십시오.
응용 프로그램의 관련되지 않은 부분을 구조적으로뿐만 아니라 논리적으로도 격리합니다. 수업을 느슨하게 결합하거나 분리하지 마십시오. 별도로 만들어야하는 프로젝트를 완전히 별도의 프로젝트로 만듭니다.
구현이 아닌 인터페이스 코드. 여러 클래스가 모두 비슷한 작업을 수행하는 경우 인터페이스를 만드십시오. 추상 기본 클래스를 의사 인터페이스로 사용하지 마십시오. 인터페이스에 의존하고 개별 구현 클래스 대신 주위를 전달하십시오.
응용 프로그램의 더 큰 범위를 이해합니다. 사업 목적은 무엇입니까? 사람들을 돕고, 목표를 달성하고, 생산성을 향상시키는 데 어떻게 도움이됩니까? 당신이 짓고있는 것들이 그 목적에 부합합니까? 건물을 짓기 위해 건물을 짓지 않았는지 확인하십시오.
누군가가 "엔터프라이즈 응용 프로그램"이라고 말하면 조심하십시오. 너무 많은 사람들에게 너무 많은 의미가있는로드 된 용어입니다. 보안, 인증, 인증, 서비스 보장 등과 같은 교차 관심사에 대해 분명히해야합니다.
엔터프라이즈 응용 프로그램은 부 풀리기 쉽습니다. 새로운 기능에 대해 "아니오"라고 말하는 것을 두려워하지 마시고, 리팩토링 담당자가 좋은 단위 테스트를 통해 무자비하게 당신의 이익을 극대화 할 수 있도록하십시오.
마지막으로 모든 사항이 중요합니다. 위의 (또는 일반적으로는 무엇이든) 극단적 인 것을 취하는 것은 나쁜 생각입니다. 극단적으로해야하는 유일한 일은 중재 자체입니다! :)
나는 디자인 활동의 두 가지 근본적인 종류를 참조하십시오.
기본 시스템 조각에 분해가 있습니다. 따라서 이미 프레젠테이션 조각을 시스템의 다른 부분과 분리하는 아이디어를 얻었습니다. 아마도 비즈니스 로직과 지속성도있을 것입니다. 첫 번째 중요한 질문은 비즈니스 로직이 실제로 갖고있는 것입니다. 일부 시스템은 단순한 데이터베이스 앞에서가는 얇은 스킨이 아니며 실제 비즈니스 로직은 거의 없습니다.다른 비즈니스 로직은 어느 정도까지 독립적입니다.
주요 준 독립적 항목이있는 경우 이벤트 및 메시지 대기열을 통해 가장 잘 통신 할 수 있습니다. 그런 종류의 분리 된 관계를 필요로하는 조각이 있는지 확인하십시오. 그러면 해당 이벤트의 이벤트와 페이로드가 식별됩니다. 다른 답변에서 참조 된 파울러가 관련성이있는 부분은 다음과 같습니다.
다음으로 비즈니스 로직을 살펴보십시오. 인터페이스 및 추상 클래스 등은 복잡성 구현을 구조화하기위한 기술입니다. 세부 사항을 숨기고 유연성을 사용할 수 있도록 코드를 구분하십시오. 나는 이것을 OO 디자인 운동으로 본다. 그것에 관한 많은 책이있다. 예를 들면 head first.
큰 질문에 대한 짧은 대답을 제공하려면 먼저 수업 설계부터 시작하십시오. 구성 요소, 레이어의 디자인으로 시작하고 "데이터베이스가 필요한가? 그렇다면 어느 것이 필요합니까?"와 같은 기술 결정을하십시오. 이것은 이미 문제 영역 분석의 일부분을 수행하고 몇 가지 필수 유스 케이스를 찾았다 고 가정합니다.
준비가 끝났 으면 확인을 위해 "컷 스루"애플리케이션을 코딩하는 것이 좋습니다 귀하의 건축 적 결정. 즉, 아주 작은 유스 케이스 만 처리하면서 대부분의 레이어를 다루는 작은 애플리케이션을 의미합니다. 아키텍처의 일부분에 결함이 있다고 생각할 때 쉽게 다시 작성/수정/삭제할 수있을만큼 작아야합니다. 그것은 또한 당신의 수업 설계에 첫 손을 잡기위한 좋은 기술입니다.
+1 부피가 큰 주제에 대한 간결하고 멋진 답변입니다. 좋은 책 참고는, 많은 경우에 저를 도왔다. – rob
깔끔하고 이해하기 쉽습니다. 책을 언급 해줘서 고마워. – NLV
+1 두 가지주의 사항이있는 큰 충고를 위해 +1 : 별도의 어셈블리로 과용하기 쉽습니다 ([Patrick Smacchia의 우수 기사] 참조). http://www.theserverside.net/tt/articles/showarticle.tss?id= ControllingDependencies) 및 2) 메시지 대기열이 미숙하고 훌륭합니다. :) –