2016-04-25 2 views
0

Eine schienen 4 anwendung enthält 2 modelle: umschlag, paket.schienen: wie man zwei ähnliche modelle

Der Umschlag hat ein Mengenfeld, in dem das Paket Gewicht und Größe sowie die Menge hat.

Die Ähnlichkeit für die beiden Objekte sind: - beide sind Artikel sein liefern - Mengenfeld in beiden Modellen - können beide Fehler haben - beide gehört zu einer Sendung Objekt - und im weiteren noch nicht sicher Anforderungen in der Zukunft, die mehr Ähnlichkeit ... So

hat, ich im Grunde von zwei Optionen, obwohl dies zu modellieren:

  1. STI - Single Table Inheritance - ich mag es nicht, weil es zwingen wird, Ich erstelle Nullwerte für " Größe "wenn Umschlag wird Geschäfte sein
  2. Klasse für jedes der Modelle erstellen - ich mag es auch nicht, weil die 2 der Modelle sind irgendwie gleich und sehr ähnlich, und ich denke, sie werden Code wegen ihrer Ähnlichkeit teilen

Ihre Hilfe wird geschätzt!

Antwort

0

Ihre zweite Option, "create class für jedes der Modelle", klingt günstiger, da sie der Single Responsibility Principle folgt.

Sollten Sie eine einzelne Klasse für diese spezifizierten Bedenken auswählen, denken Sie an Ihre Aussage, dass in der Zukunft möglicherweise mehr Anforderungen bestehen. Was Sie jetzt machen, ist "Pre-Optimization" oder "Premature Optimization", was auf lange Sicht oft zu Zeitverlust führt und in diesem Fall Ihre (einzelne) Klasse schwieriger macht, diese zukünftigen Anforderungen zu erweitern/zu modifizieren mitkommen. Gerade jetzt, während Sie diese Anwendung oder diesen Dienst entwickeln, wird die Anwendung nicht viel leiden, wenn Sie 2 Klassen/2 Tabellen zum Speichern von Paketen und Hüllkurven haben. Monate/Jahre in der Zukunft, wenn dieses Problem eine Menge Schmerzen in Form von DB-Last oder etwas Ähnlichem verursacht, sollten Sie dann die Notwendigkeit erneut überblicken, sie zu einer Klasse/Tabelle zu kombinieren.


Soweit über die kleine architektonische Eleganz sich Gedanken aus, die zwei Klassen gewonnen betroffen ist, bedenken Sie, dass diese die Art von Dingen, die nur Programmierer kümmern uns um. Die Anwendung ist wahrscheinlich nicht für Sie, sondern für die Kunden des Unternehmens. Die Kunden beachten oder kümmern sich nicht um eine reduzierte Anzahl von Klassen oder Tabellen. Sie kümmern sich nur darum, dass ihre Umschläge und Pakete geliefert werden. Gleiches gilt für den CEO, die Investoren und andere Beteiligte in der Anwendung. Es ist schwierig, als Programmierer diese Dinge loszulassen, aber es ist etwas, was wir tun müssen. Machen Sie sich keine Gedanken darüber, ob Sie mehr als eine oder zwei Minuten an kleine Leistungssteigerungen denken, es sei denn, sie stellen bereits ein Problem dar, das gelöst werden muss. Implementieren Sie zuerst die Anwendung, versenden Sie den neuen Dienst/die neue Funktion und führen Sie später eine Iteration durch, wenn für einen Leistungszuwachs benötigt wird.

+0

sehr interessante Artikel und Sie haben hier einen Punkt! Vielen Dank! – user664859