Was ist der Unterschied zwischen Daten und code?
Nehmen ein Beispiel, betrachten Sie eine Reihe von Ermäßigungen auf einem Supermarkt-shopper.
Könnten wir die Regeln definieren, wie Daten in einem standard-Mode (Listen der qualifizierende Elemente, die geltenden Termine, Gutschein-codes) und generischen code schreiben, um mit diesen umgehen. Oder wir könnten schreiben, die jeweils als ein Stück code, das die Kontrollen für die entsprechenden Dinge, die dem Kunden das shopping-Liste und gibt alle anwendbaren Rabatte.
Man vernünftigerweise speichern Sie die Regeln als Objekte, serialisierte in Blobs oder gespeichert in code-Dateien, so dass jede Regel wählen könnte, seine eigene Trennung zwischen Daten und code, zu ermöglichen, für die Zukunft Regeln, dass würde nicht passen die Art der generische Prozessor oben betrachtet.
Oft ist es einfach zu kritisieren, code, mischt Daten, die über wenn-Anweisungen, die prüfen, für 6 verschiedene Dinge, die sollten in einer Datei oder einer Datenbank, aber es ist eine Regel, die hilft, in den Rand-Fällen?
Oder ist das der Punkt, an Object-Oriented design, aufhören uns Gedanken über die Grenze zwischen Daten und code?
Zu klären, die zugrunde liegende Frage ist: Wie würden Sie das code-Beispiel oben? Gibt es eine Faustregel, dass Sie entscheiden, was Daten und was code?
(Anmerkung: ich weiß, der code kann kompiliert werden, aber in einer Welt der dynamischen Sprachen und JIT-Kompilierung, auch das ist ein unscharfes Konzept.)
- Könnten Sie bitte klären Sie die Frage. Ist die wichtigste Frage, das Thema oder was sind Sie eigentlich gefragt?
- Die Frage ist wohl wirklich wie entscheiden Sie, was im code festgelegt und was zum codieren der Daten?
- ich sehe', code und Daten " in Was Ist ein Fenster? auf der MSDN-Website ,ich 'Window Handles" Teil, die MSDN sagen :"Windows-Objekte sind — Sie haben sowohl code und Daten — Sie sind aber keine C++ - Klassen. Stattdessen ein Programm Referenzen ein Fenster mit einem Wert aufgerufen Griff" und ich Frage mich, was ist der Unterschied zwischen Ihnen!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Grundsätzlich gibt es natürlich keinen Unterschied zwischen Daten und code, aber für echte software-Infrastruktur, kann es einen großen Unterschied. Abgesehen von offensichtlichen Dingen wie, wie Sie bereits erwähnt, Zusammenstellung, das größte Problem ist dieses:
Meisten ausreichend großen Projekte sind entworfen, um zu produzieren "releases", die ein großes Bündel, hergestellt in 3-monatigen (oder länger) Zyklen, ausgiebig getestet und kann nicht nachträglich geändert werden, außer in streng kontrollierter Weise. "Code" auf jeden Fall nicht geändert werden kann, also alles, was nicht geändert werden müssen, werden ausgeklammert und "Konfiguration Daten", so dass sich das ändern wird es schmackhaft zu denen, deren job es ist, um sicherzustellen, dass eine Freigabe funktioniert.
Natürlich, in den meisten Fällen schlecht Konfigurationsdaten brechen ein release nur als gründlich als schlechten code, also die ganze Sache ist weitgehend eine illusion, in Wirklichkeit ist es egal, ob code oder "Konfiguration Daten", die Veränderungen, was zählt, ist, dass die Schnittstelle zwischen dem zentralen system und den teilen, die änderung ist schmal und gut definiert genug, um Ihnen eine gute chance, dass die person, die nicht die änderung versteht alle Folgen von dem, was er tut.
Dies ist schon härter als die meisten Leute denken, wenn es wirklich nur ein paar strings und zahlen, die konfiguriert sind (ich persönlich habe erlebt, dass ein Produktions-mainframe-system-crash, da hatte er einen boolean-Wert gesetzt, anders als ein anderes system, es war reden). Wenn Ihr "Konfiguration Daten" enthält komplexe Logik, es ist fast unmöglich zu erreichen. Aber die situation wird nicht besser ust, weil Sie eine schlecht entworfene ad-hoc-Regeln "Konfiguration" Sprache statt "echtem" code.
Dies ist eine eher philosophische Frage (die ich mag), so werde ich es beantworten in einer philosophischen Art und Weise: mit nichts viel es zu sichern. 😉
Daten ist der Teil eines Systems, der sich ändern kann. Code definiert das Verhalten, die Art und Weise, in der die Daten ändern können, die in neuen Daten.
Um es genauer: die Daten können durch zwei Komponenten beschrieben werden: ein Beschreibung, was das datum darstellen sollen (zum Beispiel eine variable mit einem Namen und einem Typ) und ein Wert.
Der Wert der Variablen ändern können, nach definierten Regeln in code. Die Beschreibung ändert sich nicht, natürlich, denn wenn Sie es tut, haben wir ein ganz neues Stück von Informationen.
Der code selbst hat sich nicht geändert, es sei denn, die Anforderungen (was erwarten wir von der system) ändern.
Einen compiler (oder eine VM), code ist tatsächlich die Daten auf dem er führt seine Operationen. Jedoch, die zu kompilierten code nicht angeben " für den compiler der compiler ist der eigene code funktioniert.
Es hängt alles von der Anforderung. Wenn die Daten wie lookup-Daten und Häufig ändert Sie nicht wirklich wollen, es zu tun im code, aber Dinge wie Tag der Woche, sollte nicht chnage für die nächsten 200 Jahre oder so, also code, der.
Könnten Sie in Erwägung ziehen, Ihr Thema, als erste, woran ich dachte, als ich es sah, war das Alter, alte LISP-Diskussion von code vs. Daten. Glück in Scheme-code und Daten gleich aussieht, aber das ist über es, man kann nie versehentlich mischen von code mit Daten ist sehr gut möglich, dass in LISP mit unhygienisch Makros.
Daten sind Informationen, die verarbeitet werden, durch die Anleitung genannten Code. Ich bin mir nicht sicher, ich meine, es ist eine Unschärfe in AUEN gibt es noch Eigenschaften (Daten) und Methoden (Code). Die OO-Theorie kapselt sowohl in gestalt Entität bezeichnet eine Klasse, aber Sie sind immer noch diskret in der Klasse.
Wie flexibel Sie möchten, um Ihren code in eine Frage der Wahl. Einschließlich Konstante Werte (das, was Sie tun, durch die Verwendung von if-Anweisungen wie oben beschrieben) ist unflexibel, ohne re-Bearbeitung Ihrer Quelle, in der Erwägung, dass die Verwendung dynamisch beschaffte Daten ist flexibler. Entweder Ansatz falsch? Ich würde sagen, es kommt wirklich auf die Umstände an. Als Leppie sagte, es gibt bestimmte "Daten" Punkte, die invariate, wie die Tage der Woche, dass kann hart codiert, aber selbst da kann es von Vorteil sein, es zu tun, die dynamisch in bestimmten Umständen.
Den wichtiger Hinweis ist, dass Sie wollen, trennen den Teil des Codes, die ausgeführt wird, jedes mal die gleiche, (d.h. die Anwendung eines ermässigten Preis) aus dem Teil des Codes was könnte sich ändern (d.h. die Produkte werden abgezinst, oder die % der Rabatt, etc.)
Dies ist einfach für die Sicherheit. Wenn ein Rabatt ändert, werden Sie nicht haben, um neu zu schreiben Ihre Rabatt-code, Sie müssen nur in Ihre Rabatten repository (DB, oder eine app-Datei oder xml-Datei, oder aber Sie wählen, um es zu implementieren) und machen eine kleine änderung einer Zahl.
Auch, wenn der Rabatt-code wird getrennt in eine XML-Datei, dann kannst du die gesamte Anwendung auf einen manager, und mit ausreichenden Anweisungen, müssen Sie nicht zu belästigen Sie, Wann immer Sie wollen, ändern Sie die discount-Tarife.
Wenn Sie sich mischen in Daten und code sind Sie exponentiell erhöhen die Chancen zu brechen, wenn sich etwas ändert. So, wie leppie sagte, müssen Sie zum extrahieren der ständig ändernden Teile und setzen Sie Sie in einem separaten Ort.
Großen Unterschied. Daten ist ein bestimmtes system während der code ist ein Teil des Systems.
Falschen Daten ist sinnlos: unser code===hf ist gut, und was Sie setzen, die Sie nehmen, es ist kein Problem des Systems, dass du meintest etwas anderes. Aber wenn der code schlecht ist - das system ist schlecht.
In Beispiel betrachten wir einige JSON, einige schlechte code parser.js von mir und sagen wir mal gute-V8. Für mein system schlecht parser.js ist ein code, und mein system falsch funktioniert. Aber für das Google-system mein schlechtes parser Daten, die keine wie sagt über die Qualität des V8.
Die Frage ist sehr praktisch, kein sophistisches.
https://en.wikipedia.org/wiki/Systems_engineering versucht eine gute Antwort und Geld.
Daten Informationen. Es geht nicht darum, wo Sie sich entscheiden, es zu setzen, sei es eine db, config-Datei, config, durch code oder innerhalb der Klassen.
Geschieht das gleiche für Verhalten /code. Es geht nicht darum, wo Sie sich entscheiden, es zu setzen oder, wie Sie sich entscheiden, Sie zu vertreten.
Grenze zwischen Daten und code (Programm) ist verschwommen. Es ist letztendlich nur eine Frage der Terminologie - zum Beispiel, könnte man sagen, dass die Daten alles, was nicht code. Aber, als Sie schrieb, Sie kann werden fröhlich miteinander vermischt (obwohl in der Regel es ist besser, bewahren Sie diese getrennt).
Code keine Daten ausgeführt werden kann. Nun, da alle Daten als Eingabe verwendet, um ein Programm an einem gewissen Punkt der Zeit, es kann gesagt werden, dass diese Daten wird ausgeführt, indem ein Programm! Somit ist dein Programm verhält sich wie eine virtuelle Maschine für Ihre Daten. Also in der Theorie gibt es keinen Unterschied zwischen Daten und code!
Am Ende, was zählt, ist software-engineering/Entwicklung Erwägungen wie Leistung, Effizienz etc. Zum Beispiel data-driven-Programme möglicherweise nicht so effizient wie Programme, die hart codierte (und damit zerbrechlichen) bedingte Anweisungen. Daher wähle ich zu definieren, der code alle Daten, die effizient ausgeführt und alles andere als einfache Daten.
Es ist ein Kompromiss zwischen Flexibilität und Effizienz. Ausführbare Daten (wie XML-Regeln) bietet mehr Flexibilität (manchmal), während die gleichen Daten/Regeln, wenn codiert, die als Teil der Anwendung wird effizienter ausgeführt werden, aber eine änderung es Häufig zu umständlich. In anderen Worten ausführbare Daten ist einfach zu implementieren, aber ineffizient ist und Umgekehrt. Also letztlich ist die Entscheidung liegt bei Ihnen - der software-designer.
Bitte korrigiert mich wenn ich da falsch.
Beziehung zwischen code und Daten ist wie folgt:
code nach zusammengestellt zu einem Programm verarbeitet die Daten, die während der Ausführung
Programm kann Daten extrahieren, transformieren von Daten, Daten laden, Daten generieren ...
Auch
das Programm kann code extrahieren, transformieren-code, laden Sie code, code generieren tooooooo...
Damit der code kompiliert ohne oder interperator ist nutzlos, Daten ist immer eine Reise Wert..., aber code nach zusammengestellt, Sie können alle der oben genannten Aktivitäten....
ZB)
Sourcecontrolsystem Prozess-Quelltexte
hier source-code selbst ist ein code
Backupscripts Prozess-Dateien
hier Dateien ist eine Daten-und so weiter...
Ich würde sagen, dass die Unterscheidung zwischen Daten, code und Konfiguration ist etwas, was im Rahmen einer bestimmten Komponente. Manchmal ist es offensichtlich, manchmal weniger.
Beispielsweise ein compiler, der Quellcode, das Sie verbraucht, und den Objekt-code erstellt es werden sowohl Daten - und sollte getrennt werden von der compiler-eigenen code.
In Ihrem Fall scheinen Sie beschreiben die Möglichkeit, ein besonders leistungsfähiges Konfigurations-Datei, die code enthalten. Viel wie, zum Beispiel, die GIMP können Sie auf 'konfigurieren' - plugins mithilfe von Schema. Wie der Entwickler der Komponente, liest diese Konfiguration, würden Sie denken, es als Daten. Beim arbeiten auf einer anderen Ebene-schreiben der Konfiguration -- Sie würden es als code.
Dies ist eine sehr leistungsfähige Möglichkeit der Gestaltung.
Anwendung dieses auf die zugrundeliegende Frage ("Wie würden Sie code-Beispiel oben?"), eine Möglichkeit wäre anzunehmen, oder entwerfen Sie ein high level-Domain Specific Language (DSL) für die Angabe von Regeln. Beim Start oder bei der ersten benötigt, der server liest die Regel und führt es.
Bieten ein admin-interface erlaubt dem administrator
... all das würde passieren zur Laufzeit.
DSL könnte sein, etwas so einfaches wie eine Tabelle parser oder eine XML-parser, oder es könnte etwas so anspruchsvoll wie eine Skriptsprache. Von C, es ist einfach zum einbetten von Python oder Lua. Von Java ist es einfach einbetten, Groovy oder Clojure.
Könnten Sie wechseln in kompilierter code, der zur Laufzeit durch geschicktes verknüpfen oder classloader tricks. Dies scheint schwieriger und weniger wertvoll, als die eingebettete DSL-option, meiner Meinung nach.
Die besten praktische Antwort auf diese Frage, die ich fand ist dies:
Jede Klasse, die muss serialisiert werden, jetzt oder in irgendeiner vorhersehbaren Zukunft ist-Daten.
Alles andere ist code.
Das ist, warum, zum Beispiel, Java HashMap ist-Daten - obwohl es eine Menge code, API-Methoden und die konkrete Umsetzung (d.h., es könnte Aussehen, als code auf den ersten Blick).