2017-08-29 1 views
0

Meine Erfahrung und mein Verständnis von Entwurfsmustern kommt von der Arbeit mit Laravel, also bin ich eigentlich nur im MVC-Entwurfsmuster erfahren, aber ich habe selbst eine Art "autocompiling" -Ansicht für jede der CRUD-Operationen entwickelt, so zum Beispiel Normalerweise verwende ich eine Art von Array in meinem Modell, um zu beschreiben, wie ich die Ansicht für das Modell selbst erzeugen möchte, und danach schreibe ich eine allgemeine Ansicht, die die Eigenschaften des Modells ausliest und basierend auf dem Array die Felder erzeugt erforderlich, so etwas wie:Ist die Hybridisierung von Designmustern eine schlechte Praxis?

class User extends Model{ 
    public $editFormArray=array(["name","text",20], 
           ["surname","text",30]); 
    [...] 
} 

und die Aussicht hat und Implementierung, die das Modell, um es, und auf der Grundlage des $ editFormArray Anstand gesendet lädt, wird es selbst

erzeugen

Etwas wie:

@foreach($resource->editFormArrayas $currForm) 
    @if ($currForm[1]=="text") 
     <div class="form-group"> 
      <div class="col-md-12"> 
       <input name="{{$currForm[0]}}" type="{{$currForm[1]}}" 
        placeholder="{{$currForm[0]}}" size="{{$currForm[2]}}"> 
      </div> 
     </div> 
    @endif 
    [...] 
@endforeach 

diese Art von Ansatz des lassen Sie mich nur 1 Aufruf für CRUD Betrieb erstellen (und einige andere sehen, dass nicht automatisch berechnet werden kann, wie pro erforderlich) und ermöglicht auch mir das Modell zu ändern Form on the fly, Hinzufügen, Entfernen und Bearbeiten von Feldern, wie ich es im laufenden Betrieb sehe, aber auch, dass meine Modelldateien wirklich geladen werden.

Einer meiner Mitarbeiter hat vor kurzem einen Kurs über Entwurfsmuster genommen und denkt, das ist schlecht, sagt eine normale MVC, mit einer manuell für jede einzelne CRUD-Operation erstellten Ansicht wäre der richtige Weg, es zu tun Ich denke, dass er falsch ist, weil das View selbst keine echte Logik berechnet (die gesamte Logik wird tatsächlich auf dem Controller gespeichert), es berechnet nur "Anzeigelogik" wie in der Logik, die erforderlich ist, um das UX selbst korrekt anzuzeigen.

Jemand könnte etwas Licht auf die Argumente schreddern?

Antwort

1

Es ist nicht schlecht, Designmuster zu hybridisieren. Sie müssen jedoch einige grundlegende Prinzipien beachten.

  • Wie viele Dateien muss ich bearbeiten, um diese Vorlage zu bearbeiten? Ändere ich dieselben Dateien, die den Datenspeicher/-abruf und die Geschäftslogik steuern?

  • Hat jemand, der gerade die Vorlage betrachtet, eine Vorstellung davon, was die semantische Bedeutung von "$ currForm [0]" ist, wenn sie es betrachten? Was ist der nächste Typ, der die Pfeife herunterkommt, der diese Sachen bearbeiten muss?

  • Sie machen im Grunde nur ein Argument, dass die Definition von mehr Dingen in Ihrem Modell es schneller zu iterieren macht. Vielleicht, wenn Sie ein Team besteht aus einer Person, und sie können das System in ihrem Kopf behalten, dass könnte wahr sein, aber es ist nicht wahr, wie ein Team oder Projekt skaliert.

    https://stackoverflow.com/a/3477771/128581

    In "Häufig vergessene Fundamental Fakten über Software Engineering" von Robert L. Glass, (ein Artikel in IEEE Software Mai/Juni 2001), Er spricht über Software "60/60" Regel, das ist, dass Wartung in der Regel verbraucht 40 bis 80% (60% Durchschnitt) von Softwarekosten, und dann, dass Erweiterung ist verantwortlich für etwa 60% der Softwarewartung Kosten, während die Fehlerkorrektur ist etwa 17%.

    Wenn manchmal bis zu 80% der Kosten der Software Wartung ist, versuchen Sie es einfach zu warten. Die Trennung von Bedenken kann, wenn sie richtig genutzt wird, helfen. Hören Sie nicht auf das Dogma, aber Sie müssen sorgfältig darüber nachdenken, wie leicht etwas für andere Menschen zu verstehen ist und wie es Ihnen helfen kann, häufige Softwarefehler zu vermeiden.

    +0

    Im Grunde mit einer guten Dokumentation des Entwicklungsprozesses, hier und da explizite Kommentare, während auch die Namen der "Autodesignlogik" Variablen auf eine Weise ändern, die leichter zu verstehen ist, könnte dies eigentlich ein guter Weg sein, richtig? Ich meine, ich mache es so, weil das Softwer-Design sich ständig ändert. Anstatt also die gleichen Dinge zu schreiben, zu löschen und zu bearbeiten, modifiziere ich einfach ein Array, indem ich ein einzelnes Element hinzufüge/bearbeite/lösche das Ergebnis in der Präsentationsschicht, so in meiner Absicht, diese Wartung zu beschleunigen. –

    +0

    Yeah, du verpasst den Punkt, aber hey, wenn dein Boss dich das tun lässt, dann mach es. – Josh

    +0

    Nun, die Sache ist, ich bin der Chef in diesem Fall, und ich versuche meine Entscheidungsfindung in dieser Sache zu verbessern, also würde ich es lieben, wenn Sie mir helfen könnten, den Punkt zu treffen, ich will es verstehen. –

    Verwandte Themen