2011-05-11 9 views
12

나는 다소 장고 초급자이며 가능한 한 많은 응용 프로그램을 분리하고 가능한 한 작은 재사용 가능한 조각으로 만들려고 노력 해왔다. 제임스 베넷 (James Bennett)의 전략 인 re-usable apps을 따르려고합니다. 이를 염두에두고, 나는이 문제를 보았다.재사용 가능한 장고 앱 만들기

의 내가 영화에 대한 정보를 저장하는 응용 프로그램이 있었다 가정 해 봅시다 :

코드는이 같은 보일 것이다 : 나는 등급을 추가하고 싶다면 지금

class Movie(models.Model): 
    name = models.CharField(max_length=255) 
    ... 

을, 나는 장고 등급을 사용할 수 단순히 내 모델에 필드를 추가 :

class Movie(models.Model): 
    name = models.CharField(max_length=255) 
    rating = RatingField(range=5) 
    ... 

이 본질적으로 내 영화 응용 프로그램은 이제 장고 - 등급에 의존하는 것을 의미하고 내가 그것을 다시 사용하고 싶었,하지만 더 이상 등급을 필요한 경우, 나는 여전히 장고 등급을 설치하거나 수정하고 내 응용 프로그램을 포크해야합니다.

이제 가져 오기를 사용하여 try/except를 사용하여이 문제를 해결할 수 있었고 성공하면 필드를 정의 할 수 있었지만 지금은 내 영화 앱이 데이터베이스 테이블 정의의 등급에 명시 적으로 연결되어 있습니다.

두 모델을 분리하고 Movie 대신에 등급 모델에서 관계를 정의하는 것이 더 합리적입니다. 그런 식으로 등급을 사용할 때 종속성이 정의되지만 영화 앱을 사용할 때는 필요하지 않습니다.

이 문제를 어떻게 처리합니까? 모델을 분리하는 더 좋은 방법이 있습니까?

이 작업을 수행 할 때 중대한 성능 저하가 있는지 궁금합니다.

편집 :이 점이 문제의 예가되고 점을 설명하기 위해 다소 고안된 것임을 분명히하고 싶습니다. 나는 관련 데이터를 추가해야 할 때마다 "영화"모델을 수정하지 않고 추가 정보를 추가 할 수 있기를 원합니다. 지금까지의 답변에 감사드립니다.

+3

나는 모든 영화를 아주 좋아합니다. – zeekay

답변

4

이 경우 개인적으로 간단하게 유지하고 rating을 모델에 남겨 둡니다. 재사용 성과 구현의 단순성 간의 균형을 맞추어야합니다. 재사용이 가능하도록하는 것이 좋지만, Movie 모델은 추가 작업을 보증 할만큼 충분히 유용합니까? 의존성을 갖는 것이 그렇게 나쁜 것입니까? 나는 이러한 디자인 결정의 대부분이 주관적인 것이라고 생각한다. 올해이 주제에 대한 PyCon의 호의가있었습니다 : http://blip.tv/file/4882961

1

위의 zeekay에 동의합니다. 재사용 성이 그만한 가치가 있는지를 먼저 조사해야합니다.

movies.models.Movierating이라는 필드가있는 movierating 앱을 새로 만들 수 있습니다.

rating어떻게 든을 템플릿에 전달할 수 있습니다. 이를 위해서는 class-based-views을 만들고 movierating.views에는 get_context 메서드를 확장하고 재정의 할 수 있습니다.

재사용을 달성하는 것은 개발자가하고 오버하고있는 첫 번째 장소에서 그 일을하지대로 나쁜 될 수하는 근본적인 가치 판단입니다 잊지 마십시오.

0

종속성을 갖는 것이 반드시 나쁜 것은 아닙니다. 필드 (등급, timedelta, JSON 객체)와 같이, 필요한 것을 수행하는 내장 필드가없는 곳에서,이를 처리하는 별도의 앱 (템플릿 태그와 같은 일부 관련 기능)을 포함시켜야하는 기능은 기능입니다. 벌레가 아니야.

기타 앱의 모델이 다른 앱의 모델을 참조하는 경우가 더 자주 발생합니다. 물론 이것은 현실 세계에서 발생하지만,이 경우 격리 된 모델을 식별하는 것이 훨씬 더 어려워집니다.

관련 문제