Django에서 새 앱 (startapp 포함)을 언제 만들까요?


102

나는 이것에 대해 검색해 보았지만, Django가 "앱"으로 정의하는 것과 관련하여 여전히 문제가 있습니다.

기본 프로젝트의 모델을 사용하더라도 사이트의 각 기능에 대해 새 앱을 만들어야합니까?

새 앱을 언제 분리하고 "메인 프로젝트"나 다른 앱과 함께 기능을 유지해야하는지에 대한 좋은 경험 규칙이 있습니까?

답변:



18

저는 Django 애플리케이션을 "애플리케이션"이라기보다는 재사용 가능한 모듈 또는 구성 요소로 생각하는 것을 선호합니다.

이렇게하면 특정 기능을 서로 캡슐화하고 분리하여 특정 "앱"을 커뮤니티 전체와 공유하기로 결정한 경우 재사용 가능성과 유지 관리 가능성이 향상됩니다.

내 일반적인 접근 방식은 특정 기능 또는 기능 세트를 공개적으로 릴리스하려는 것처럼 "앱"에 버킷으로 묶는 것입니다. 여기서 어려운 부분은 각 버킷의 크기를 파악하는 것입니다.

내가 사용하는 좋은 비결은 내 앱이 공개적으로 출시되면 어떻게 사용 될지 상상하는 것입니다. 이것은 종종 버킷을 축소하고 "목적"을 더 명확하게 정의하도록 권장합니다.


16

다음은 2008 년 9 월 6 일에 업데이트 된 프레젠테이션입니다.

DjangoCon 2008 : 재사용 가능한 앱 @ 7 : 53

슬라이드 : Reusable_apps.pdf

슬라이드에서 가져온

자체 애플리케이션이어야합니까?

  • 앱의 초점과 완전히 관련이 없습니까?
  • 내가하고있는 다른 일과 직각입니까?
  • 다른 사이트에서도 유사한 기능이 필요합니까?

그들 중 "예"가 있다면? 그런 다음 별도의 응용 프로그램으로 나누는 것이 가장 좋습니다.


내가 본 슬라이드에는 "앱의 초점"에 대한 첫 번째 질문이 포함되어 있지 않습니다.
johnny

@johnny 99 개 중 31 번째 슬라이드에 있습니다.
Yeo

13

저는 논리적으로 분리 된 각 모델 세트에 대해 새로운 애플리케이션을 만드는 경향이 있습니다. 예 :

  • 사용자 프로필
  • 포럼 게시물
  • 블로그 게시물

6

내가 따르는 규칙은 다른 프로젝트에서 기능을 재사용하려면 새 앱이어야한다는 것입니다.

프로젝트의 모델에 대한 깊은 이해가 필요한 경우 모델을 고수하는 것이 더 응집력이있을 것입니다.


4

웹에서 찾은이 질문에 대한 두 가지 최고의 답변은 다음과 같습니다.

  1. 재사용 가능한 앱 토크 ( 슬라이드 ) ( 비디오 )는 다른 답변에서도 언급되었습니다. 저자이자 Django 기고자 인 Bennett은 다른 사람들이 사용할 수 있도록 정기적으로 앱을 게시하고 많은 작은 앱에 대해 강력한 관점을 가지고 있습니다.
  2. Doordash의 Django at Scale 팁 은 정반대의 조언을 제공하며 여러 개별 앱으로 시작한 후 하나의 단일 앱으로 마이그레이션했다고 말합니다. 앱 간의 마이그레이션 종속성 그래프에 문제가 발생했습니다.

두 소스 모두 다음 상황에서 별도의 앱을 만들어야한다는 데 동의합니다.

  • 다른 Django 프로젝트에서 앱을 재사용하려는 경우 (특히 다른 사람이 재사용 할 수 있도록 게시하려는 경우).
  • 앱에 다른 앱과의 종속성이 거의 없거나 전혀없는 경우. 여기에서 미래에 자체 마이크로 서비스로 실행되는 앱을 상상할 수 있습니다.

1

'앱'은 여러 가지가 될 수 있으며 모든 것이 실제로 맛볼 수 있습니다. 예를 들어 블로그를 만들고 있다고 가정 해 보겠습니다. 귀하의 앱은 전체 블로그가 될 수도 있고, '관리자'앱, 모든 공개보기를위한 '사이트'앱, 'rss'앱, '서비스'앱이있어 개발자가 자신의 블로그에서 블로그와 인터페이스 할 수 있습니다. 자신의 방식 등

개인적으로 블로그 자체를 앱으로 만들고 그 안에있는 기능을 분리합니다. 그런 다음 블로그를 다른 웹 사이트에서 쉽게 재사용 할 수 있습니다.

Django의 좋은 점은 디렉토리 트리의 모든 수준에있는 모든 models.py 파일을 Django 모델을 포함하는 파일로 인식한다는 것입니다. 따라서 기능을 '앱'자체 내에서 더 작은 '하위 앱'으로 분리한다고해서 더 어려워지는 것은 아닙니다.

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