2016-03-24 3 views
0

Wir haben einen Ingenieur in unserem Team, die das tun, um den folgend innerhalb von JSON-Daten mögen:Putting Logik in JSON-Daten

"sichtbar": "$ (= state 'state_c')"

jetzt im Modell hat er die folgende Methode, den Zustand zu bestimmen:

protected function getCurrentState():String 
{ 
    var state:String = "defaultState"; 

    if (xxxx) 
     state = "state_A"; 
    else if (xxxx) 
     state = "state_B"; 
    else if (xxxx) 
     state = "state_C"; 
    else 
     state = "state_D"; 

    return state; 
} 

nun an anderer Stelle, wenn ich den Zustand aktualisieren muß ich nennen würde folgende:

data.state = getCurren tState();

Die in JSON-Daten verwendete Notation lautet in der Präfixnotation (LISP), falls Sie neugierig sind. Der Code, in dem das Modell vorhanden ist, wird in AS3 geschrieben, und das Objekt mit dem Namen "data" ist das Objekt vom Typ Object.

Ich bin gegen diese Idee und ich verstehe nicht den Wert der Logik in Daten zu setzen. Ich habe noch nie ein Paradigma gesehen, das auf diese Weise verwendet werden würde. Ich denke, das bricht das MVC-Architekturdesign und führt viele verschiedene Probleme ein. Hier sind meine größten Probleme mit diesem Entwurf:

1) Die ganze Logik ist unsicher Typ (Daten typ unsicher)

2) Nun muss der Entwickler wissen, wie drei verschiedene Dinge zu tun, um eine Aufgabe abzuschließen (schreiben die Programmierer Teil der JSON-Daten, schreiben Sie die Schreibweise korrekt Präfix und korrekte Logik in Code setzen)

3) ich habe keinen guten Weg, um Unit-Test sehen dieses Verhalten

4) Aufstriche Logik in mehrere Bereiche des Codes und damit wird das Finden eines Fehlers schwieriger.

Ich bin auf der Suche nach Meinungen zu diesem Thema. Warum sollte das eine gute Idee sein? Sind meine Gründe, es zu missachten, gültig? Gibt es einen Wert, den ich vermisse?

+0

Zuallererst wird dies wahrscheinlich geschlossen werden, da es "primär auf der Meinung der Befragten" basiert. Zweitens verbinde ich die Teile hier nicht. Die 'getCurrentState'-Funktion sieht gut aus. Mit 'data.state = getCurrentState()' wo 'data' ist' Object' anstelle einer Klasse mit 'state' Eigenschaft ist keine großartige Idee IMO. Aber was haben diese Dinge mit dem funkigen "sichtbaren": "$ (...)" 'Code zu tun? Wie hängen sie zusammen? Gibt es einen AS3-Code, der diesen Ausdruck analysiert und mit "data.state" vergleicht? Wo ist dieser Code? Wie sieht es aus? Wann wird es aufgerufen? – Aaron

+0

Ja, ich weiß, dass dies hauptsächlich auf Meinungen basierte, aber ich suchte nach irgendeiner Bestätigung auf die eine oder andere Weise. Der Funky-Code ist verwandt, weil er die Sichtbarkeit basierend auf dem Status ändert, den Sie im AS3-Code geändert haben. Es gibt AS3-Code, der den Ausdruck analysiert. Diese AS3-Klasse analysiert Daten bei jedem Empfang und fügt sie einem typischen Datenmodell hinzu. Im Datenmodell ist die Funktion currentState vorhanden. Hilft Ihnen das, das Problem besser zu verstehen? Ich bin immer noch der festen Überzeugung, dass das eine schlechte Design-Entscheidung für alle Gründe über – ShaffDaddy

+0

ist. Ja, es ist eine gute Diskussion. Ich gebe dir nur einen Hinweis darauf, dass SO keine meinungsbezogenen Fragen mag. Persönlich habe ich kein Problem. In Bezug auf das Code-Design stimme ich zu, dass es alle möglichen Probleme gibt, wie die, die Sie angegeben haben. IMO schreiben einen benutzerdefinierten String-Parser ist keine gute allgemeine Möglichkeit, eine Sprache (JSON und AS3 in Ihrem Fall) zu verwenden. JSON ist ein Datentransport, AS3 ist eine Programmiersprache, die Logik sollte in AS3 sein. Viel Glück. – Aaron

Antwort

-1

Alle Ihre Argumente sind die richtigen. Ich werde hier nicht auf bestimmte Details eingehen, da alle die gleichen Argumente für not using eval gelten und ausführlich diskutiert wurden.