Przez kilka tygodni uczyłem się clojure, a ostatnio zacząłem czytać kod open source: clojure i kompilatory clojurescript oraz niektóre biblioteki takie jak om, boot, figwheel.Co z długimi plikami clojure?
Zauważyłem, że niektóre pliki clojure są bardzo długie, niektóre z nich mają ponad tysiąc LOC. Biorąc pod uwagę, że kod clojure jest bardzo zwięzły i niski, ten kod oznacza o wiele więcej kodu niż plik, który jest duży w niektórych innych językach.
Pochodzę z tła OO, gdzie zazwyczaj masz jedną klasę na plik i starasz się zachować krótkie lekcje (SRP) Stwierdziłem, że trochę dziwne.
Wiem, że kod clojure składa się głównie z czystych funkcji i jest o wiele łatwiejsze do zrozumienia niż jakaś zmienna klasa, w której należy zachować obecny stan w umyśle, i stwierdzam, że potrafię czytać i rozumieć większość z nich. funkcje jeden na raz. Ale większość z tych funkcji jest bardzo dobrze zaprojektowana, aby nie były od siebie zależne: nawet jeśli można używać (filter odd?)
, nie oznacza to, że są one powiązane. Ale kod "codziennie" (aplikacje LOB, aplikacje internetowe itp.) Bardzo utrudnia zachowanie funkcji jako takich (przynajmniej takie jest moje doświadczenie z programowaniem OO).
Widziałem także kilka demonstracji aplikacji clojurescript (om, odczynnik, itp.), W których deklarują wszystkie komponenty w tym samym pliku. Nie wiem, czy to dlatego, że jest to tylko wersja demonstracyjna, a w prawdziwej aplikacji, którą można uzyskać, to product.clj
i category.clj
lub po prostu sposób zachowania: mieć jeden plik na przestrzeń nazw/moduł/ograniczony kontekst.
myślę, że gdybym otworzyć folder i widzę product.clj
, category.clj
, order.clj
, etc mogę dostać się pomysł na pierwszy rzut oka co to folder, o, lepiej niż tylko o components.clj
lub core.clj
.
Więc moje pytania to:
- Jest to wspólne dla „każdego dnia” kodu Clojure mieć te bardzo długie pliki? czy to tylko dlatego, że czytam kod bibliotek, a "normalny" kod jest bardziej "modułowy", mam na myśli: więcej plików i mniejszą długość.
- Czy posiadanie długich plików, takich jak te, sprawia, że trudniej jest zrozumieć na pierwszy rzut oka, o co chodzi w tej aplikacji? podobnie jak mój przykład produktu/kategorii/zamówienia powyżej lub przez jakąś właściwość clojuresque, która nie jest problemem.
- W przypadku długich plików to "sposób kłamstwa", jak radzisz sobie z konfliktami, refaktoringami, programowaniem w zespole ... czy wszyscy dotykają tego samego pliku?