문제

비교적 큰 크기의 프로젝트에서 기능을 다양한 기능으로 분할 한 다음 다양한 모듈과 다양한 패키지로 나누는 것에 대해 생각 해야하는 시점이 있습니다. 때로는 다른 소스 분포에서 (예 : OptParser와 같은 공통 유틸리티를 별도의 프로젝트로 추출 함) 때때로.

질문 - 동일한 모듈에 넣을 부품과 별도의 모듈에 넣을 부품을 어떻게 결정합니까? 패키지에 대해 동일한 질문.

도움이 되었습니까?

해결책

보다 하나의 파일에 몇 개의 파이썬 클래스를 넣어야합니까?

전체 클래스 정의 세트를 스케치하십시오.

이 클래스 정의를 "모듈"으로 분할하십시오.

모듈을 서로 별도로 구현하고 테스트하십시오.

최종 응용 프로그램을 만들기 위해 모듈을 함께 니트하십시오.

메모. 유기적으로 진화 한 작업 응용 프로그램을 분해하는 것은 거의 불가능합니다. 그러니 그렇게하지 마십시오.

디자인을 일찍 그리고 자주 분해하십시오. 별도의 모듈을 구축하십시오. 애플리케이션을 구축하려면 통합됩니다.

다른 팁

David Parnas의 고전적인 논문이 "시스템을 모듈로 분해하는 데 사용되는 기준"이라고 불렀습니다. 그것은 고전적인 것입니다 (그리고 특정 나이가 있으므로 약간 구식이 될 수 있습니다).

어쩌면 거기서부터 시작할 수 있습니다. PDF는 여기에서 사용할 수 있습니다.

http://www.cs.umd.edu/class/spring2003/cmsc838p/design/criteria.pdf

펜과 종이 조각을 꺼냅니다. 소프트웨어가 높은 수준에서 상호 작용하는 방식을 그리십시오. 소프트웨어 등의 다른 계층 등을 그립니다. 기능과 목적에 따라 그룹 항목을 그릴 수도 있습니다. 귀하의 소프트웨어에 여러 가지 추상화 레이어가있는 경우, 나는 그것에 의해 그룹화한다고 말할 것입니다. 높은 수준에서 특정 층의 요소는 모두 동일한 범용을 공유합니다. 이제 소프트웨어가 레이어에 있으므로 특정 기능 또는 전문화를 기반으로 이러한 계층을 다른 프로젝트로 나눌 수 있습니다.

이 작업을 수행 해야하는 특정 단계는? 여러 사람이 코드 기반에서 작업하거나 프로젝트를 최대한 모듈로 유지하려는 경우라고 말하고 싶습니다. 바라건대 귀하의 코드가이를 수행 할 수있을 정도로 모듈 식이기를 바랍니다. 소프트웨어를 높은 수준으로 분리 할 수없는 경우 소프트웨어가 스파게티 코드 일 수 있으며 리팩토링을 살펴보아야합니다.

바라건대 그것은 당신과 함께 일할 무언가를 줄 것입니다.

IMHO 이것은 아마도 개발 과정에서 이전에하는 일 중 하나 일 것입니다. 나는 대규모 프로젝트에서 일한 적이 없지만, 당신이해야 할 일과 어디에 있는지에 대한 로드맵을 만드는 것이 합리적입니다. (실수 한 것처럼 묻는 것에 대해 늑골을 쓰려고하지 않습니다 : D)

모듈은 일반적으로 목적이나 기능에 따라 어떻게 든 그룹화됩니다. 인터페이스 또는 기타 연결의 각 구현을 시도 할 수 있습니다.

나는 당신과 동정합니다. 당신은 자기 의심으로 고통 받고 있습니다. 괜찮아요. 모국어를 포함한 언어를 말할 수 있다면 스스로 모듈화를 수행 할 자격이 있습니다. 증거를 얻으려면 "언어 본능"또는 "수학 본능"을 읽을 수 있습니다.

주위를 둘러 보지만 너무 많지는 않습니다. 당신은 그들로부터 많은 것을 배울 수 있지만, 그들 에게서도 많은 나쁜 것을 배울 수 있습니다.

  1. 일부 프로젝트/프레임 워크는 과대 광고를 많이 얻습니다. 그러나 기능 그룹 중 일부, 모듈에 주어진 이름조차도 오해의 소지가 있습니다. 그들은 프로그래머들의 "의도를 밝히지"않습니다. 그들은 "높은 응집력"테스트에 실패합니다.

  2. 책은 더 나은 것이 아닙니다. 책 선택에 80/20 규칙을 적용하십시오. Capers Jones의 2010 "소프트웨어 엔지니어링 모범 사례"와 같은 훌륭하고 완벽하고 잘 연구 된 책조차도 단서가 없습니다. 10 인 Agile/XP 팀은 Windows Vista 또는 25 년 동안 ERP 패키지를 수행하는 데 12 년이 걸릴 것이라고합니다! 2009 년까지는 분할 용어 인 모듈화 용어가 없다고 말합니다. 나는 그것이 당신을 도울 것이라고 생각하지 않습니다.

내 요점은 다음과 같습니다. 모델/참조/예제 소스를 매우 신중하게 선택해야합니다. 유명한 이름을 과대 평가하지 말고 자신을 과소 평가하지 마십시오.

내 경험에 입증 된 나의 도움이 있습니다.

  1. 어떤 DB 테이블에 어떤 속성이 진행되는지 결정하는 것과 비슷합니다. 어떤 클래스/객체 등에 어떤 속성/메소드가 발생합니까? 더 깊은 수준에서는 집에 가구를 배치하거나 선반에있는 책과 매우 흡사합니다. 당신은 이미 그런 일을했습니다. 소프트웨어는 동일하고 큰 문제는 없습니다!

  2. 먼저 "응집력"에 대해 걱정하십시오. 예 : 책 (Leo Tolstoy, James Joyce, de Lawrence)은 선택적입니다. (HTML, CSS, John Keats. JQuery, Tinymce)는 그렇지 않습니다. 그리고 물건을 준비하는 방법에는 여러 가지가 있습니다. 분류 학자조차도 여전히 이것에 대해 심각한 불화를 겪고 있습니다.

  3. 그런 다음 "커플 링"에 대해 걱정하십시오. "부끄러워". "낯선 사람과 이야기하지 마십시오." 과도하게 친숙하지 마십시오. 패키지/DB 테이블/클래스/객체/모듈/책장을 가능한 한 독립적으로 독립적으로 만들어보십시오. Joel은 Excel 팀에 대한 그의 감탄에 대해 모든 외부 의존성을 혐오하고 심지어 자체 컴파일러를 구축 한 것에 대해 이야기했습니다.

실제로 그것은 당신이 만든 각 프로젝트마다 다르지만 다음은 다음과 같습니다.

  1. core 패키지에는 프로젝트가없는 모듈이 포함되어 있습니다. 여기에는 응용 프로그램의 주요 기능이 포함될 수 있습니다.
  2. ui 패키지에는 사용자 인터페이스를 다루는 모듈이 포함되어 있습니다. 그것은 당신이 당신의 콘솔에서 UI를 분할하는 경우입니다.

이것은 단지 예입니다. 그리고 어디로 가야하는지 결정하는 것은 정말로 당신이 될 것입니다.

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