2017-05-15 2 views
0

Ich habe ein Modell/eine Klasse mit eigenen Methoden, um einige Daten zu berechnen. Kürzlich muss ich ein neues boolesches/Auswahlfeld is_producing einführen, basierend auf dieser Feldberechnung wird an mehreren Stellen geändert, besonders bei Eigenschaftsmethoden. Wie unter Beispiel:Wie wird mit Verhaltensänderungen eines Modells nach der Einführung eines neuen Feldes umgegangen?

class Lease(models.Model): 
    name = models.CharField(max_length=250) 

    @property 
    def owner_count(self): 
     return 27 # for example 


class Lease(models.Model): 
    name = models.CharField(max_length=250) 
    is_producing = models.BooleanField(default=True) 

    @property 
    def owner_count(self): 
     if self.is_producing: 
      return 27 # for example 
     else: 
      return 20 # for example 

class Offer(models.Model): 
    lease = models.ForeignKey(Lease) 
    amount = models.FloatField() 

    def save(self): 
     if self.lease.is_producing: 
      self.amount = 100 # For Example 
     else: 
      self.amount = 200 

Es scheint, dass if/else an allen Orten mit Anti-Muster und nicht intuitiv. Auf der anderen Seite, wenn wir ein neues Modell mit diesem neuen Feld erstellen, wird es viel Code kopieren und Modelle verbinden.

So suche ich nach Design-Muster, die das obige Szenario oder jede andere elegante Lösung lösen können, die es mit weniger Code-Duplikation lösen würde.

Antwort

0

Ich habe alle Zusammenhang mit `t anziehen, was Sie erreichen wollen, aber meine erste Wette würde im Observer, Design, Muster zu sehen sein:

https://en.wikipedia.org/wiki/Observer_pattern.

Das Leasing würde als subject betrachtet werden, das eine Liste von Beobachtern (die Orte, über die Sie sprechen) durch seine interne Statusänderung interessiert. Diese places würde automatisch bei jeder Statusänderung benachrichtigt werden. Dies würde die Notwendigkeit für das if/else, auf das Sie sich beziehen, beseitigen und würde eine gute Entkopplung zwischen den Komponenten ermöglichen.

Hoffe, das wird helfen.

+0

Sie haben hier den ganzen Kontext verpasst. Kennst du Django ein bisschen? – jbacker

Verwandte Themen