대형 모듈을 분할하면 부작용이 있습니까? [닫은]


21

나는 github 프로젝트를 탐색하고 10 만 개 이상의 라인 이있는이 모듈 을 발견 했습니다 .

단일 모듈에서 많은 양의 코드를 갖는 것이 일반적인 관행입니까?

이것은 여러 모듈로 나누어야한다고 생각합니다. 각 DB 엔진마다 하나씩 일 수 있습니다.

개발자가 이와 같은 하나의 거대한 모듈을 만들면 어떤 이점이 있습니까 ( "한 곳에서 모든 기능을 수행하는 것"이외) 또는 모듈을 분리하면 어떤 단점 ( "복잡성"이 아닌 것)이 있습니까?


8k 라인이 아닙니다.
BЈовић

4
그것은 모듈의 크기가 아니라 그것을 사용하는 방법입니다.
jmq

4
프로그램은 사람이 읽을 수 있으며 우연히도 컴퓨터가 실행할 수있는 도널드 크 누스입니다.
Mahmoud Hossam

1
모듈 / 서브 모듈은 하나의 특정 작업을 수행해야합니다. 파이썬에서 2 개의 숫자를 더하는 (실리 한) 모듈은 2 줄만됩니다. 더 복잡한 것을 수행하는 모듈은 분명히 더 커질 것입니다. 모듈 / 하위 모듈을 하나의 기능으로 만 제한한다고 말합니다. 이를 벤치 마크로 유지하십시오.
c0da

객체 지향 코드의 가장 중요한 점은 우려와 분리 된 건조로 구성된 체계적인 클래스 구조를 갖는 것입니다. 그러면 모듈을 나누는 것이 쉬운 부분입니다.
Acumenus

답변:


14

당신이 만난 것은 소위 " 신의 대상 "입니다. 왜냐하면 모든 것이 또는 모든 것을 알고 있기 때문입니다. 그것을 피하십시오 (가능한 경우).

모듈 당 정해진 수의 LOC가 없지만 코드를 쉽게 탐색하고 메소드의 수행 내용을 쉽게 이해할 수 있도록해야합니다. 내 개인적인 경험에서 모듈이 1k line * 이상이면 잘못된 일이 있습니다.

* 1k 라인 모듈조차도 매우 큽니다.


9
주어진 예제는 God Object 가 아니며 실제로 doctest를 포함한 전체 클래스 계층 구조이며 단일 .py 파일에 있습니다. 이것은 이상적이지는 않지만 실용적인 방법이 있기 때문에 BillThor가 제안한 것처럼 코드 자체는 합리적으로 잘 구성되어 있습니다. 그것은 확실히 God Object 의 고전적인 정의에 맞지 않습니다. 하나님 이해야 할 일이 상당히 복잡하고 다양한 시나리오에 적응할 수 있어야합니다.
마크 부스

6

일반적인 크기 제한이 적용되지 않는 모듈 인 것 같습니다. 기능의 대부분은 처음 2k 코드 줄과 주석에 있습니다. 파일의 나머지 부분은 많은 어댑터 클래스 및 모듈에 밀접하게 연결된 것처럼 보이는 다른 지원 클래스 인 것으로 보입니다. 다른 언어에서는 클래스가 적당한 크기의 별도 파일로되어 있습니다.

더 많은 doc 문자열이 유용 할 수 있지만 이미 큰 모듈의 크기가 증가합니다. 필요한 경우 적절한 주석으로 코드를 명확하고 자명하게 설명합니다.


5

물론 실제 "제한"은 프로젝트와 다양한 요인에 따라 다릅니다.

그러나 나는 200 줄 의 괜찮은 파이썬 으로 엄지 손가락 을 들었습니다. 즉, Python으로 작성된 C 또는 Java 코드는 없지만 Python에서는 훌륭합니다.


1

와우.

나는 이것에 대한 완전한 대답을 모른다고 생각하지만 제목 질문 "Python 모듈은 얼마나 커야합니까?"에 대한 대답으로 생각하고 싶습니다. 비밀을 숨기고 Parnas의 개념으로. 이 경우 모듈은 올바르게 수행하는 것처럼 보입니다 (그리고 숨겨지는 큰 비밀).

나는 나중에 커플 링과 응집력에 관해 많은 이야기를하는 논문을 파고 들었습니다. DB 모듈이 많을 경우 모듈간에 너무 많은 호출이 발생하여 나쁜 관행으로 간주되는 항목, 즉 응집력이 낮고 커플 링이 높아질 수 있습니다.

나는 모범 사례가 지시하는 것에도 불구하고 단순성과 이해를 위해 모범 사례를 희생하기로 결정한 프로그래머에 관한 실험 데이터를 보았습니다. 실제로 모범 사례 간에도 충돌이있을 수 있습니다. 예를 들어 성능이 일반적으로 나중에 유지 보수를하는 사람들을 행복하게하는 것은 아닙니다. 이 경우 큰 모듈을 사용하면 가독성이 어떻게 향상 될지 잘 모르겠습니다.

내가 알아 차린 또 다른 것은 코드의 일부가 일반으로 표시되고 나머지 DB는 코드에서 확장된다는 것입니다. 나는 파이썬 프로그래머가 아니지만 아마도 뭔가를 정당화 할 수 있습니까?

따라서 최종 답변이 없지만 누군가 가이 점을 강조하기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.