2012-01-12 12 views
6

Mój projekt składa się z kilku aplikacji django, które muszą być wdrożone w różny sposób, być może na różnych komputerach. Jednak często te aplikacje czasami potrzebują dostępu do swoich modeli, więc myślałem o "eksternalizacji" moich modeli, aby można było uzyskać do nich dostęp w bardziej elegancki sposób z dowolnej aplikacji. Więc pomysł jest mają struktury katalogów przypominający coś takiego:Czy dobrą praktyką programowania jest oddzielanie modeli od reszty aplikacji?

/ 
+ application1 
+ application2 
+ models 

istnieje funkcjonalny punkt to robić (inny niż kod konserwacji), ponieważ aplikacje mogą odsyłaczy siebie?

+1

Trudno powiedzieć. czy możesz pomyśleć o słabszej stronie? czy byłoby to mylące ze wszystkimi modelami wymieszanymi w jednym folderze? – dqhendricks

+1

@dqhendricks: Nie, niezupełnie. W rzeczywistości łatwiej byłoby nim zarządzać, ponieważ mielibyśmy jeden punkt skupienia dla interfejsu bazy danych ... – Goro

+1

Modele ** w aplikacjach ** mogą od siebie zależeć. Dlaczego warto wypakować modele? Czym jest "bardziej elegancko"? 'from app.models import To, To' wydaje się całkiem eleganckie. Jak możesz to poprawić? –

Odpowiedz

4

dodaje się ustęp w django book sprawia, że ​​myślę, że nie jest dobrym pomysłem (I dodaje pogrubienie):

Istnieje jednak jeden wymóg dotyczący konwencji aplikacji: jeśli używasz Django warstwa bazy danych (modele), musisz utworzyć aplikację Django. Modele muszą żyć w aplikacjach. Dlatego, aby zacząć pisać nasze modele, musimy utworzyć nową aplikację.

+1

Jak można wywnioskować z cytatu, że modele muszą żyć w tej samej aplikacji, w której są używane? Czy nie mogłaby to być aplikacja do modelowania? – aaronasterling

+0

Litera prawa czasami różni się od ducha za nim. Może istnieć aplikacja do modeli z modelem modeli, który zawiera wszystkie modele. Chodzi o to, aby uniknąć monolitycznej aplikacji potwora, która ma wszystko w sobie. Ale. Z pewnością można mieć jedną aplikację ze wszystkimi modelami, a wszystkie pozostałe aplikacje to tylko kolekcje funkcji widoku. Ale to nie jest * duch * Django. –

2

Nie sądzę, że jest to szczególnie dobry pomysł, chociaż widzę odwołanie. Będziesz zawierał wiele modeli, których nie używasz, jeśli chcesz zainstalować tylko jedną z aplikacji. Uważam, że najlepiej jest przechowywać modele w aplikacji, z której najbardziej się odnoszą.

Może to również spowodować, że używanie interfejsu administratora będzie bardziej kłopotliwe. Gdzie rejestrujesz modele u administratora? Gdzie dokonujesz personalizacji administratora dla modelu?

+0

Dobra robota, ale myślę, że jeśli zrobi się to właściwie, sprawi to, że wszystko będzie bardziej uporządkowane: jeśli przeniesiemy wszystkie modele do ich własnych aplikacji, możemy po prostu mieć administratora w tej aplikacji, obejmującego wszystkie modele. – Goro

3

Poniższa nie dobrze pasuje w komentarzach do użytkownika @ jcollado odpowiedź więc będę umieścić go tutaj:

https://docs.djangoproject.com/en/dev/topics/db/models/#models-across-files

modele w plikach

Jest doskonale OK, aby odnosić model do jednego z innej aplikacji. Aby to zrobić, zaimportuj odpowiedni model u góry modelu, który przechowuje model. Następnie po prostu odwołaj się do drugiej klasy modelu, jeśli jest taka potrzeba. Na przykład:

from geography.models import ZipCode 

class Restaurant(models.Model): 
    # ... 
    zip_code = models.ForeignKey(ZipCode) 
Powiązane problemy