Ab wann wird eine Konfigurationsdatei zur Programmiersprache?

90

Ich habe schon eine Weile über Konfigurationsdateien und ihre Beziehung zum Code nachgedacht und je nach Tag und Windrichtung scheinen sich meine Meinungen zu ändern. Immer mehr komme ich auf die Erkenntnis zurück, die ich beim Erlernen von Lisp zum ersten Mal hatte: Es gibt kaum einen Unterschied zwischen Daten und Code. Dies scheint für Konfigurationsdateien doppelt zu gelten. Im richtigen Licht betrachtet ist ein Perl-Skript kaum mehr als eine Konfigurationsdatei für Perl. Dies hat in der Regel ziemlich schwerwiegende Konsequenzen für Aufgaben wie Qualitätssicherung und Arbeitsteilung, z. B. wer für das Ändern von Konfigurationsdateien verantwortlich sein sollte.

Das Kriechen von der Konfigurationsdatei zur vollwertigen Sprache ist im Allgemeinen langsam und scheint vom Wunsch nach einem generischen System getrieben zu sein. Die meisten Projekte scheinen klein anzufangen, mit ein paar Konfigurationselementen wie dem Schreiben von Protokollen, dem Suchen nach Daten, Benutzernamen und Kennwörtern usw. Aber dann beginnen sie zu wachsen: Funktionen können ein- oder ausgeschaltet werden, Die Zeitabläufe und die Reihenfolge der Operationen werden allmählich gesteuert, und zwangsläufig möchte jemand damit beginnen, Logik hinzuzufügen (z. B. 10, wenn die Maschine X ist, und 15, wenn die Maschine Y ist). Ab einem bestimmten Punkt wird die Konfigurationsdatei zu einer domänenspezifischen Sprache, und zwar zu einer schlecht geschriebenen.

Nachdem ich mich auf den Weg gemacht habe, sind hier meine Fragen:

  1. Was ist der wahre Zweck einer Konfigurationsdatei?
  2. Sollte versucht werden, Konfigurationsdateien einfach zu halten?
  3. Wer sollte für Änderungen an ihnen verantwortlich sein (Entwickler, Benutzer, Administratoren usw.)?
  4. Sollten sie quellengesteuert sein (siehe Frage 3)?

Wie ich bereits sagte, ändern sich meine Antworten auf diese Fragen ständig, aber im Moment denke ich:

  1. Damit Nicht-Programmierer große Verhaltensblöcke schnell ändern können
  2. Ja, alles, was nicht grobkörnig ist, sollte im Code enthalten sein
  3. Benutzer sollten für Konfigurationsdateien verantwortlich sein, und Programmierer sollten für eine Konfigurationsschicht zwischen Konfigurationsdateien und Code verantwortlich sein, die eine genauere Kontrolle über die Anwendung ermöglicht
  4. nein, aber die feinkörnigere Mittelschicht sollte sein
Chas. Owens
quelle
23
Wenn sie Turing-komplett werden, natürlich!
Aib
2
Reguläre Ausdrücke sind nicht vollständig, werden aber dennoch als Computersprache betrachtet.
Chas. Owens
"Dateien" sind für einige Konfigurationssituationen nicht wirklich ausreichend. Daher die Existenz von Systemen wie gconf.
Ali Afshar
1
Es gibt keinen wirklichen Unterschied zwischen gconf und einer Datei. Gconf ist wirklich nur eine Reihe von Verzeichnissen mit Dateien in ihnen mit einer In-Memory-Darstellung. Selbst wenn Sie ein RDBMS aufrufen, könnte es durch eine einzelne Datei dargestellt werden. Das Problem ist, wie viel Komplexität in einer Konfigurationsdatei sicher / gut ist.
Chas. Owens
Chas. Es ist der Unterschied, wie Sie auf die "Datei" zugreifen. Und wie Sie mit Änderungen an Konfigurationsdaten umgehen, wenn mehrere Clients verbunden sind. Ja, Gconf wird als Dateien auf einer Festplatte dargestellt, verhält sich jedoch anders. Wenn Sie "Komplexität der Konfigurationsdaten in einem Konfigurationssystem" meinen, sicher.
Ali Afshar

Antworten:

40

Sehr interessante Fragen!

Ich neige dazu, meine Konfigurationsdateien auf ein sehr einfaches "key = value" -Format zu beschränken, da ich Ihnen voll und ganz zustimme, dass Konfigurationsdateien sehr schnell zu vollständigen Programmen werden können. Zum Beispiel kennt jeder, der jemals versucht hat, OpenSER zu "konfigurieren", das Gefühl, von dem Sie sprechen: Es ist keine Konfiguration, es ist (schmerzhafte) Programmierung.

Wenn Ihre Anwendung auf eine Weise "konfigurierbar" sein muss, die Sie sich heute nicht vorstellen können, brauchen Sie wirklich ein Plugins-System . Sie müssen Ihre Anwendung so entwickeln, dass jemand anderes ein neues Plugin codieren und es in Zukunft in Ihre Anwendung einbinden kann.

Um Ihre Fragen zu beantworten:

  1. Was ist der wahre Zweck einer Konfigurationsdatei?

    Ich würde sagen, damit die Personen, die Ihre Anwendung installieren, einige bereitstellungsbezogene Parameter wie den Hostnamen, die Anzahl der Threads, die Namen der von Ihnen benötigten Plugins und die Bereitstellungsparameter für diese Plugins abrufen können (überprüfen Sie diese Option) out FreeRadius 'Konfiguration für ein Beispiel dieses Prinzips), etc .. Definitiv nicht der Ort, um Geschäftslogik auszudrücken.

  2. Sollte versucht werden, Konfigurationsdateien einfach zu halten?

    Bestimmt. Wie Sie vorgeschlagen haben, ist das "Programmieren" in einer Konfigurationsdatei schrecklich. Ich glaube, es sollte vermieden werden.

  3. Wer sollte für Änderungen an ihnen verantwortlich sein (Entwickler, Benutzer, Administratoren usw.)?

    Im Allgemeinen würde ich Admins sagen, die die Anwendung bereitstellen.

  4. Sollten sie quellengesteuert sein (siehe Frage 3)?

    Normalerweise mache ich nicht Quellcodeverwaltung , die Konfigurationsdateien selbst, aber ich tun Quellcodeverwaltung eine Vorlage Konfigurationsdatei mit allen Parametern und ihre Standardwerte und Kommentare zu beschreiben , was sie tun. Wenn zum Beispiel eine Konfigurationsdatei benannt ist, steuere database.confich normalerweise eine Datei mit dem Namen Quellcodeverwaltung database.conf.template. Jetzt spreche ich natürlich darüber, was ich als Entwickler mache . Als Administrator möchte ich möglicherweise die tatsächlichen Einstellungen steuern, die ich für jede Installation ausgewählt habe. Zum Beispiel verwalten wir einige hundert Server remote und müssen deren Konfigurationen verfolgen: Wir haben uns für die Quellcodeverwaltung entschieden.


Bearbeiten: Obwohl ich glaube, dass das oben Gesagte für die meisten Anwendungen zutrifft, gibt es natürlich immer Ausnahmen. Ihre Anwendung kann es ihren Benutzern beispielsweise ermöglichen, komplexe Regeln dynamisch zu konfigurieren. Bei den meisten E-Mail-Clients können die Benutzer Regeln für die Verwaltung ihrer E-Mails definieren (z. B. "Alle E-Mails, die von" John Doe "stammen und mich nicht im Feld" An: "haben, sollten verworfen werden"). Ein weiteres Beispiel ist eine Anwendung, mit der der Benutzer ein neues komplexes kommerzielles Angebot definieren kann. Sie können auch an Anwendungen wie Cognos denken, mit denen Benutzer komplexe Datenbankberichte erstellen können. Der E-Mail-Client bietet dem Benutzer wahrscheinlich eine einfache Schnittstelle zum Definieren der Regeln, wodurch eine komplexe Konfigurationsdatei (oder sogar ein bisschen Code) generiert wird. Andererseits, Die benutzerdefinierte Konfiguration für die kommerziellen Angebote kann strukturiert in einer Datenbank gespeichert werden (weder ein einfacher Schlüssel = Wertestruktur noch ein Teil des Codes). In einigen anderen Anwendungen kann der Benutzer möglicherweise sogar in Python oder VB oder einer anderen automatisierungsfähigen Sprache codieren. Mit anderen Worten ... Ihr Kilometerstand kann variieren.

MiniQuark
quelle
10

OK. Sie werden einige Benutzer haben, die eine wirklich einfache Konfiguration wünschen, die Sie ihnen geben sollten. Gleichzeitig werden Sie ständig gefragt: "Können Sie dies hinzufügen? Wie mache ich das in der Konfigurationsdatei?". Ich verstehe nicht, warum Sie nicht beide Gruppen unterstützen können.

Das Projekt, an dem ich gerade arbeite, verwendet Lua für seine Konfigurationsdatei. Lua ist eine Skriptsprache und funktioniert in diesem Szenario recht gut. Es gibt ein Beispiel für unsere Standardkonfiguration .

Sie werden feststellen, dass es sich hauptsächlich um key = value-Anweisungen handelt, bei denen value ein beliebiger integrierter Typ von Lua sein kann. Das Komplizierteste, was es gibt, sind Listen, und sie sind nicht wirklich kompliziert (es ist nur eine Frage der Syntax).

Jetzt warte ich nur noch darauf, dass jemand fragt, wie der Port seines Servers bei jedem Start auf einen zufälligen Wert gesetzt werden soll ...

MattJ
quelle
1
+1 für die Verwendung einer tatsächlichen Programmiersprache, weitaus übersichtlicher, als nur eine aus einer Konfigurationsdatei wachsen zu lassen
Benjamin Confino
+1 - es ist der richtige Ansatz. Lua hat eine sehr "config-ähnliche" Syntax für diejenigen, die neu sind. Und ermöglicht mächtige Manipulationen für diejenigen, die es nicht sind.
Andrew Y
8

Vor kurzem habe ich an einem Projekt gearbeitet und festgestellt, dass ich Bedingungen in meiner Konfigurationsdatei haben möchte - die zuvor nur eine recht einfache Form gewesen war:


key = val
key2 = val
name = `hostname`

Ich wollte keine Minisprache schreiben, denn wenn ich es nicht sehr sorgfältig tat, konnte ich die Flexibilität nicht zulassen, die nützlich wäre.

Stattdessen entschied ich mich für zwei Formen:

  1. Wenn die Datei mit "#!" und war ausführbar Ich würde das Ergebnis der Ausführung analysieren.

  2. Sonst würde ich es so lesen wie es ist

Dies bedeutet, dass ich jetzt Leuten erlauben kann, "Konfigurationsdateien" zu schreiben, die so aussehen:

 #!/usr/bin/perl
if ( -x /bin/foo ) 
{
   print <<EOF;
foo=me
bar=you
EOF
}
else
{
   print <<EOF;
foo=bar
bar=foo
EOF
}

Auf diese Weise erhalte ich die Leistung einer dynamischen Konfigurationsdatei, wenn der Benutzer sie verwenden möchte, und die Einfachheit, keine eigene Minisprache schreiben zu müssen.


quelle
4

Jedes (ausreichend langlebige) Konfigurationsdateischema wird schließlich zu einer Programmiersprache. Aufgrund all der Implikationen, die Sie beschreiben, ist es für die Konfigurationsdatei-Designerin ratsam, zu erkennen, dass sie eine Programmiersprache erstellt und entsprechend plant, damit sie zukünftige Benutzer nicht mit schlechtem Erbe belastet.

Brian
quelle
3

Ich habe eine andere Philosophie über Konfigurationsdateien. Daten darüber, wie eine Anwendung ausgeführt werden soll, sind weiterhin Daten und gehören daher in einen Datenspeicher, nicht in Code (eine Konfigurationsdatei IMO ist Code). Wenn Endbenutzer in der Lage sein müssen, die Daten zu ändern, sollte die Anwendung eine Schnittstelle bereitstellen, um dies zu tun.

Ich verwende nur Konfigurationsdateien, um auf Datenspeicher zu verweisen.

Sarah Mei
quelle
3

Sie können sich der Berechnungstheorie zuwenden, um zu definieren, was als Programmiersprache zählt. Wenn Ihr Konfigurationsdateiformat Turing Complete ist, zählt es vernünftigerweise als Programmiersprache. Nach dieser Definition gilt ein Dateiformat zur Beschreibung der Sokoban- Ebenen als Programmiersprache (siehe hier ). Unter Turing Complete gibt es noch andere Komplexitätsstufen, die ebenfalls zählen können, z. B. reguläre Grammatiken und Pushdown-Automaten .

Eine andere Sichtweise ist, dass viele Konfigurationsdateien nur Datenmarkups können, während eine geeignete Programmiersprache Algorithmen implementieren muss . Beispielsweise ist JSON ein Konfigurationsdateiformat, während ECMA Script eine Programmiersprache ist.

Parappa
quelle
2

Hier sind meine Gedanken:

  1. Damit kann das Laufzeitverhalten einer Anwendung einfach geändert werden. Dies kann je nach Bedarf von Programmierern oder Nicht-Programmierern erfolgen. Dies kann während der Entwicklung geschehen, aber ich sehe häufig Konfigurationsdateien, um ein Programm jederzeit flexibler zu gestalten.

  2. Ja. Ich denke, Konfigurationsdateien sollten so einfach wie möglich sein, da Sie möglicherweise verschiedene Optionen benötigen, um unterschiedliche Verhaltensweisen Ihrer Laufzeit zu steuern. Ich bevorzuge es, Konfigurationseinstellungen zu gruppieren und sie so weit wie möglich zu vereinfachen.

  3. Kommt darauf an, was und warum die Änderung vorgenommen wird. Wenn Benutzer es ändern, sollte ein Front-End erstellt werden, um sie vor den Details zu verbergen. Gleiches gilt häufig für Nichtentwickler im Allgemeinen.

  4. Ich kontrolliere häufig die "Standard" -Konfiguration, habe aber eine Möglichkeit, diese pro System für die tatsächliche Laufzeit zu überschreiben.

Was das Hinzufügen von Logik zur Konfigurationsdatei betrifft, würde ich dies vermeiden. Ich denke, es ist besser, wenn nur die Konfigurationsdatei die Logik in Ihrer Anwendung einschaltet. Das Verhalten in Konfigurationsdateien führt meiner Erfahrung nach zu einem Mangel an Wartbarkeit und Verständnis. Ich bevorzuge es sehr, Konfigurationsdateien so einfach wie möglich zu halten.

Reed Copsey
quelle
2

Ich stimme der Prämisse dieser Frage eher zu. Ich vermeide es, in Schwierigkeiten zu geraten, indem ich frühzeitig vorhersage, dass dies passieren wird, und rolle daher niemals mein eigenes Konfigurationssystem.

  • Entweder verwende ich die Konfigurationsfunktion des Betriebssystems (z. B. eine Liste oder eine Gconf oder was auch immer angemessen ist).
  • Oder eine einfache flache Datei, wie sie von einem handelsüblichen INI-Parser verarbeitet werden kann.
  • Beißen Sie die Kugel und stecken Sie einen leichten Sprachparser, normalerweise lua, manchmal tcl in die Anwendung,
  • Oder speichern Sie Daten in einer SQLite oder einer ähnlichen relationalen Datenbank.

Und geben Sie sich damit ab, mit jeder Entscheidung zu leben, die ich getroffen habe, oder wenn ich nicht kann, umgestalten Sie eine der oben genannten Optionen, die besser zur Anwendung passt.

Der Punkt ist, dass es keinen Grund gibt, eine selbst entwickelte Konfigurationslösung zu verwenden. Zum einen ist es für Ihre Benutzer schwieriger, ein neues, anwendungsspezifisches Konfigurationsformat zu erlernen. Zum anderen profitieren Sie von all den vielen Fehlerkorrekturen und Updates, die bei Verwendung einer Standardlösung kostenlos sind. Schließlich wird Feature Creep zum Stillstand gebracht, da Sie tatsächlich nicht einfach ein weiteres Feature hinzufügen können, ohne wirklich eine umfassende Überarbeitung durchzuführen, da das Konfigurationssystem nicht wirklich in Ihren Händen liegt.

SingleNegationElimination
quelle
1

Dies hängt davon ab, was Sie mit anderen Entwicklern im Team vereinbaren. Verwenden Sie Konfigurationsdateien nur als Konfigurationsdateien oder erstellen Sie eine modellgesteuerte Anwendung.

Symptome, dass die Konfigurationsdatei zur Programmiersprache wird:

  • Name = Wert-Paare beginnen voneinander abhängig zu werden
  • Sie haben das Bedürfnis nach einer Flusskontrolle (z. B. wenn (dies) als das )
  • Die Dokumentation für die Konfigurationsdatei ist für die weitere Entwicklung unerlässlich (anstatt nur die Anwendung zu verwenden).
  • Bevor der Wert aus der Konfiguration gelesen wird, muss ein Kontext vorhanden sein (dh die Werte hängen von etwas ab, das außerhalb der Konfigurationsdatei selbst liegt).
Milan Babuškov
quelle
1

Konfigurationsdateien werden ausnahmslos zu hässlichen, unlogischen "vollwertigen Programmiersprachen". Es erfordert Kunst und Geschick, gute Programmiersprachen zu entwerfen, und Konfigurationssprachen, die in Programmiersprachen umgewandelt wurden, sind in der Regel schrecklich.

Ein guter Ansatz besteht darin, eine gut gestaltete Sprache zu verwenden, z. B. Python oder Ruby, und damit ein DSL für Ihre Konfiguration zu erstellen . Auf diese Weise kann Ihre Konfigurationssprache an der Oberfläche einfach bleiben, aber tatsächlich die vollwertige Programmiersprache sein.

Parand
quelle
1

Ich glaube, Ihre Frage ist angesichts der Umstellung auf "fließende Schnittstellen" sehr relevant. Viele Entwickler haben das Licht in Bezug auf XML-konfigurierte Anwendungen "erblickt". Die Verwendung von XML kann sehr ausführlich und schwierig zu bearbeiten sein (insbesondere wenn kein Schema bereitgestellt wird). Mit einer fließenden Benutzeroberfläche kann der Entwickler die Anwendung mithilfe einiger Schlüssel-Wert-Paare aus einer Nur-Text-Konfigurationsdatei (oder möglicherweise Befehlszeilenparametern) in einer domänenspezifischen Sprache konfigurieren. Es macht es auch sehr einfach, neue Instanzen der Anwendung zum Testen oder was auch immer einzurichten und zu konfigurieren.

Hier sind meine Antworten auf Ihre Frage:

  • Was ist der wahre Zweck einer Konfigurationsdatei?

Mit einer Konfigurationsdatei kann der Benutzer das Verhalten seines Programms zur Laufzeit anpassen.

  • Sollte versucht werden, Konfigurationsdateien einfach zu halten?

Im Idealfall würde ich denken, dass Konfigurationsdateien zumindest durch eine fließende Schnittstelle zur Konfiguration des Programms ergänzt werden sollten (dies ist in vielerlei Hinsicht nützlich). Wenn Sie eine Konfigurationsdatei benötigen, sollte diese sehr einfach gehalten werden, nichts anderes als Schlüssel-Wert-Paare.

  • Wer sollte für Änderungen an ihnen verantwortlich sein (Entwickler, Benutzer, Administratoren usw.)?

Ich denke, die Antwort darauf hängt von Ihrer Organisation ab. Es sollte in der Verantwortung der Person liegen, die die Software bereitstellt, sicherzustellen, dass sie ordnungsgemäß konfiguriert ist.

  • Sollten sie quellengesteuert sein (siehe Frage 3)?

Ich werde diese Antwort von jemand anderem stehlen :) Ich mag die Idee, eine Vorlagenkonfiguration in der Quellcodeverwaltung zu speichern und sie an die Bedürfnisse jedes lokalen Benutzers anzupassen. Wahrscheinlich ist die Konfigurationsdatei eines Entwicklers der Albtraum eines anderen Entwicklers. Daher ist es am besten, Dinge, die je nach Benutzer variieren, außerhalb der Quellcodeverwaltung zu lassen. Eine Vorlage ist auch eine gute Möglichkeit, damit die Person, die die Anwendung bereitstellt (oder andere Entwickler), genau sieht, welche Werte für die Konfigurationsdatei gültig sind.

Jeffrey Cameron
quelle
1

Ich habe Programme gesehen Python , wo die Konfigurationsdatei ist Code. Wenn Sie nichts Besonderes tun müssen (Bedingungen usw.), sieht es nicht viel anders aus als andere Konfigurationsstile. zB könnte ich eine Datei config.pymit Sachen wie machen:

num_threads = 13
hostname = 'myhost'

und die einzige Belastung für den Benutzer im Vergleich zu (sagen wir) INI-Dateien besteht darin, dass er Zeichenfolgen um '' setzen muss. Zweifellos könnten Sie dasselbe in anderen interpretierten Sprachen tun. Es gibt Ihnen unbegrenzte Möglichkeiten, Ihre Konfigurationsdatei bei Bedarf zu komplizieren, wobei das Risiko besteht, dass Ihre Benutzer möglicherweise Angst bekommen.

John Fouhy
quelle
0

Ja, Konfigurationsdateien sollten einfach sein. Sie sollten selbst keine 'Logik' enthalten - betrachten Sie sie als eine Liste von Ausdrücken in if-Anweisungen, nicht als bedingte Anweisungen in ihrer Gesamtheit.

Sie dienen dazu, dem Benutzer zu ermöglichen, zu entscheiden, welche der in der Anwendung codierten Optionen verwendet werden sollen. Versuchen Sie also nicht, sie kompliziert zu machen, da dies sich selbst zunichte macht. Möglicherweise schreiben Sie einfache Konfigurationsdateien um zu steuern, wie die ursprüngliche Konfigurationsdatei anders konfiguriert werden soll!

gbjbaanb
quelle
0

Einer der Zwecke der "Oslo" -Arbeit bei Microsoft besteht darin, die Lösung dieses Problems zuzulassen (obwohl dies nicht erforderlich ist).

  1. Eine Anwendung wird mit Modellen aller neuen Komponenten geliefert, die sie enthält. Es würden auch vorhandene Modelle verwendet. Beispielsweise kann es einen Webdienst enthalten, sodass das Systemmodell eines Webdienstes wiederverwendet werden kann.
  2. Die Modelle enthalten Metadaten, die sie beschreiben, einschließlich genügend Informationen, damit Tools entweder textuell oder grafisch darauf zugreifen können.
  3. Teile der Modelle entsprechen "Konfiguration"

Dies bedeutet, dass das Äquivalent der heutigen Konfigurationsdateien möglicherweise umfangreich genug ist, um sowohl die textuelle als auch die grafische Bearbeitung ihrer Konfiguration zu unterstützen. Das grafische Werkzeug wird mit "Oslo" (Codename "Quadrant") geliefert.

John Saunders
quelle
0

Ich werde der Gegenspieler sein und einreichen, dass es nur eine Sprache ist, wenn sie mehr verkörpert, als durch XML dargestellt werden kann. oder wenn XML als Sprache betrachtet wird.

Alternativ können die meisten Konfigurationsdateien als Klassen betrachtet werden, jedoch nur mit Eigenschaften und ohne Methoden. Und ohne Methoden denke ich nicht, dass es eine Sprache ist.

Letztendlich ist "Sprache" eine matschige Abstraktion, aber ja, die Kanten sind mehrdeutig.

dkretz
quelle
0

Der Code unserer Anwendungen wird weniger wichtig ... Es gibt Skripte, es gibt alle Arten von Attributen, die das Verhalten von Klassen, Methoden, Methodenargumenten und Eigenschaften definieren. Benutzer können Datenbankauslöser und Datenbankeinschränkungen definieren. Es kann sehr komplizierte Konfigurationsdateien geben. Manchmal kann der Benutzer XSLT-Stylesheets definieren, um die Eingabe und Ausgabe zu bearbeiten, da unsere Systeme offen sein müssen (SOA). Und es gibt Dinge wie BizzTalk, die ebenfalls eine komplexe Konfiguration benötigen. Benutzer können komplexe Workflows definieren.

Wir müssen besseren Code schreiben, um mit dieser komplexen Umgebung fertig zu werden, damit der Code unserer Anwendungen wichtiger wird ...

tuinstoel
quelle
0

Ich bin ein großer Fan von Python-Programmen als Konfigurationsdateien, insbesondere für Daemons. Ich mag es, den Daemon bis auf den "Konfigurationsport" komplett leer zu machen. Das Python-Programm stellt dann eine Verbindung zum Dämon her und erstellt Objekte im Dämon und verbindet sie, um die gewünschte Konfiguration zu erstellen. Sobald alles eingerichtet ist, kann der Dämon alleine ausgeführt werden. Die Vorteile sind natürlich, dass Sie eine vollwertige Programmiersprache zum Schreiben Ihrer Konfigurationsdateien erhalten. Da Sie bereits die Möglichkeit haben, von einem anderen Programm aus mit dem Daemon zu kommunizieren, können Sie diese zum Debuggen und Abrufen von Statistiken verwenden. Der größte Nachteil ist, dass Sie sich jederzeit mit Nachrichten von einem anderen Programm befassen müssen.


quelle
0

Konfigurationsdatei : "Was ist mein Zweck?"
Sie : "Konfigurieren Sie die Butter."
Konfigurationsdatei : "Ok ..."
Konfigurationsdatei : "Was ist mein Zweck?"
Sie : "Sie konfigurieren Butter."
Konfigurationsdatei : "Oh mein Gott."

  1. Es gibt keinen "wahren Zweck" einer Konfigurationsdatei. Es ist alles, was für Ihre Anwendung Sinn macht. Im Allgemeinen sollten sich Dinge, die sich zwischen Computern unterscheiden (oder unterscheiden könnten) und sich während des Anwendungslaufs nicht ändern, wahrscheinlich in einer Konfigurationsdatei befinden. Standardeinstellungen, Ports und Adressen für andere Dienste sind hervorragende Kandidaten. Schlüssel und Geheimnisse sind ebenfalls gute Kandidaten, sollten jedoch aus Sicherheitsgründen getrennt von Ihrer normalen Konfiguration behandelt werden. Ich bin nicht der Meinung, dass der Zweck einer Konfigurationsdatei darin besteht, schnelle Änderungen vorzunehmen. Der Zweck sollte darin bestehen, Flexibilität bei der Einrichtung Ihrer Anwendung zu ermöglichen. Wenn eine Konfigurationsdatei schnell und einfach ist, um diese Flexibilität zu ermöglichen, umso besser - aber Sie sollten nicht beabsichtigen, dass sich Ihre Konfigurationsdateien häufig ändern.

  2. Ja und nein. Sollten Sie versuchen, den Code Ihrer Anwendung einfach zu gestalten? Ja. Sie sollten versuchen, alles, was Sie schreiben, einfach und auf den Punkt zu bringen. Nicht komplizierter als es sein muss. Gleiches gilt für Ihre Konfiguration. Dies ist jedoch sehr anwendungsspezifisch. Hardcodierung, was in der Konfiguration sein sollte, weil es Ihre Konfiguration "zu kompliziert" machen würde, ist schlechtes Design. In der Tat ist der Versuch, "die Dinge einfach zu halten", der Grund, warum Konfigurationsdateien ein riesiges Durcheinander sind. Manchmal ist es am einfachsten, zu modularisieren. Aus diesem Grund sollten Ihre Konfigurationsdateien in einer bekannten Allzweck-Programmiersprache geschrieben werden - nicht in einer schrecklichen Konfigurationssprache (lesen Sie: Alle "Konfigurationssprachen" saugen ).

  3. Auch hier ist es völlig anwendungsabhängig, wer Konfigurationsdateien ändern soll. Ich stimme jedoch dem Miniquark zu. Wer auch immer die Anwendung bereitstellt, sollte für die Konfiguration verantwortlich sein.

  4. Quellcodeverwaltung alles, was Sie können. Die Quellcodeverwaltung ist großartig. Sie können ganz einfach zurücksetzen und haben eine vollständige Historie der von Ihnen vorgenommenen Änderungen und eine Aufzeichnung darüber, wer diese Änderungen vorgenommen hat. Also warum nicht?

BT
quelle