안녕하세요,패키지/모듈 종속성 트리를 올바르게 구성하는 방법은 무엇입니까?
현재 파이썬 라이브러리를 작성 중입니다. 현재 모듈과 클래스는 이유가없는 디자인으로 조직되지 않은 방식으로 배포됩니다. 좀 더 공식적인 버전이 나오면 수업과 모듈을 재구성하여 전반적인 디자인을 개선하고 싶습니다. 가져 오기 종속성에 대한 다이어그램을 그렸으며 클래스 수준을 기준으로 클래스를 집계 할 계획이었습니다. 또한, 이러한 종속성을 줄이기 위해 클래스에 대한 수정을 고려 중이었습니다.
잠재적으로 복잡하고 제작이 많은 파이썬 라이브러리를 전반적으로 잘 디자인하기위한 전략은 무엇입니까? 흥미로운 제안이 있습니까?
감사
업데이트 : 참으로 엄지 손가락의 규칙을 찾고 있었다
. 당신이 bar.b를 가져 d.py과에서는 hello.c를 가져 a.py이 일이 예를 들어,이 경우 발생 가정 (초기화는 명확성을 위해 제거 평)
foo/bar/a.py
foo/bar/b.py
foo/hello/c.py
foo/hello/d.py
지금, 나는 고려할 것 이것은 나쁜 설정. 또 다른 경우는
foo/bar/a.py
foo/bar/baz/b.py
foo/bar/baz/c.py
이라고 가정합니다. a.py와 b.py 모두 c. 1) b 가져 오기 c, 가져 오기 baz.c 2) foo/bar에서 c를 이동합니다. a.py import c, b.py imports .c 3) c를 다른 곳으로 옮긴 다음 (예 : foo/cpackage/c.py) a와 b 모두 가져 오기 cpackage.c
3) , c.py가 독립 실행 형 모듈로서 아무런 의미가 없다면 (예를 들어 바 패키지에 "private"으로 유지하기를 원하기 때문에) 우선적으로 1)로 갈 것입니다.
다른 많은 유사한 경우가 있습니다. 엄지 손가락의 규칙은 종속성과 교차 횟수를 최소한으로 줄여 고도로 분지되고 고도로 얽힌 설정을 방지하는 것이지만 잘못 될 수 있습니다.
레이어를 사용하면 클래스/모듈이 해당 패키지의 내용이나 "하위"서비스를 포함하는 다른 패키지에 종속되도록 패키지를 구성해야합니다. 필자는 모든 패키지를 "독립 라이브러리"로 간주 할 것이며, 결국 다른 패키지에 의존하여 원형 종속성을 갖지 않게됩니다. –