2013-07-29 11 views
76

Ich lerne Schienen.Zufällige "Bedenken" Ordner und ".keep" Dateien

Irgendwo entlang der Linie bemerkte ich, dass scheinbar zufällige Ordner und Dateien im Verzeichnis meiner Rails-App erscheinen. In einigen Ordnern gibt es einen concerns Ordner mit einer .keep Datei darin. Die Datei .keep scheint leer zu sein. In anderen Ordnern gibt es keinen concerns Ordner, aber eine leere .keep Datei ist vorhanden.

Weiß jemand, was der Deal mit diesen Dateien/Ordnern ist?

Antwort

116

.keep Dateien sind 0-Byte-Dateien, die vorhanden sind, um zu verhindern, dass leere Ordner von allen möglichen Prozessen ignoriert werden. Nichts, über das man sich sorgen sollte.

+2

toll, danke! Also sollte ich sie verlassen? Ich wollte sie löschen, wenn sie nicht notwendig sind. –

+4

Ja, du solltest sie behalten, damit sie da sind, wenn du sie brauchst. Es wird auch sicherstellen, dass die Ordner von Ihrem Versionskontrollsystem bemerkt werden. – Josh

+0

Soll ich sie in mein '.gitignore' legen? Ich würde lieber keine leeren Dateien speichern. – tbodt

20

.keep Dateien sind besonders hilfreich, wenn Sie leere Verzeichnisse mit git festschreiben wollen.

Fun Tatsache, der Name .keep oder .gitkeep ist bedeutungslos. Sie können die Datei .foo für den gleichen Effekt aufrufen, es ist nur eine lesbare Konvention.

Die .keep Dateien sind auch da, um Portage von einem VCS zu einem anderen zu unterstützen, das Löschen wichtiger Verzeichnisse verhindert, wenn Sie etwas zusammenführen, das dazu führen würde, dass diese Verzeichnisse leer sind.

Betrachten Sie zum Beispiel ein Skript, das versucht, cd dir in ein Verzeichnis, das nicht von git tracked ist.

Es ist ein Software-Design-Paradigma, das versucht, die Anzahl der Entscheidungen zu verringern, die Entwickler machen müssen, um Einfachheit zu gewinnen, aber nicht unbedingt die Flexibilität zu verlieren.

4

Bedenken ist ein einfaches, aber starkes Konzept. Es existiert für die Wiederverwendbarkeit von Code. Grundsätzlich besteht die Idee darin, allgemeine und/oder kontextspezifische Codeabschnitte zu extrahieren, um die Modelle zu bereinigen und zu vermeiden, dass sie zu fett und unkontrollierbar werden.

Ich möchte explizit angeben, dass Sie Serviceobjekte verwenden sollten, um Funktionalität bereitzustellen, die nicht das spezifische Objekt betrifft. ZB hat eine Organisation viele Benutzer. Jetzt muss der Administrator der Organisation eine CSV aller Benutzer für diese Organisation exportieren. Dieser Code kann in das Organisationsmodell eingefügt werden, da er jedoch nicht in der Verantwortung des Organisationsobjekts liegt, sollte dieser Code in einer Klasse platziert werden, in der Sie einfach das Organisationsobjekt übergeben und die CSV aller Benutzer zurückgibt.

class Services::GenerateCsv 
    def self.get_users org 
     #add logic the fetch users for the org and generate the CSV and return the CSV data 
    end 
end 

Wenn Sie CSV-Generierung benötigen, können Sie diese Logik in der oben genannten Klasse platzieren. Dieser Ansatz hält das Objekt (in diesem Fall das Organisationsmodell) von dem Code fern, der nicht in seiner Verantwortung liegt. Ein allgemeiner Grundsatz, dem ich folge, ist: Wenn der Code das Self-Objekt verändert, verschiebe den Code auf ein Service-Objekt.

Hinweis: Ihre Frage bezog sich auf Bedenken, aber ich dachte darüber nach, einige zusätzliche Dinge hinzuzufügen, um die Codebasis sauber und überschaubar zu halten, da sie anderen Programmierern helfen könnte. Dieser obige Ansatz ist umstritten.

Verwandte Themen