Jestem programistą .NET i właśnie miałem okazję zagrać z Ruby on Rails w ten weekend.
W .NET oddzielamy warstwy aplikacji, tworząc osobne projekty bibliotek klas. Z punktu widzenia wzorca projektowego, czy musimy to robić również w Railsach, czy jest to tylko jeden projekt z tym wszystkim?
design-patterns
.net
ruby-on-rails
Ryan Adriano
źródło
źródło
Odpowiedzi:
Przekonasz się, że aplikacje Railsowe zaczynają się jako pojedyncze repo. Bardziej skuteczne (Twitter, Square, wiele innych) dzielą się na wiele baz kodów, gdy rosną w ten wymóg. Te dodatkowe bazy kodu mogą być demonami , usługami , klejnotami, silnikami szyn lub czymś innym.
To przekształcanie w wiele projektów nie jest wykonywane, dopóki nie okaże się konieczne, ponieważ YAGNI . Rozwidlenie projektu w pierwszym dniu spowalnia czas prototypowania, a szybkość prototypowania jest kluczową siłą Ruby i Rails. Musisz pamiętać, że tworzenie lub klasa w Rubim prawie nic nie kosztuje, podobnie jak podział dobrze zaprojektowanej klasy. Twój czysty kod Ruby będzie żył głównie pod
/app/
(app/models
,app/views
app/controllers
,app/helpers
) i/lib/
. Twoje statyczne zasoby, warstwowe JS / Coffee obejmuje i CSS / Sass / etc obejmuje będą/app/assets
.Zrozumienie, dlaczego rozbicie klasy Ruby jest tak łatwe, wymaga trochę czytania na temat pisania na kaczkach i zrozumienia, że interfejsy Ruby nie są tak ironiczne, jak można się przyzwyczaić w mniej dynamicznym środowisku.
Oto kilka linków, które mogą Cię zainteresować:
Krótki opis pisania na kaczych ( blog blogu Yehuda Katz )
Nieoceniona Sandi Metz o tym, jak i dlaczego projektować programy OO, które są łatwe do odczytania, zrozumienia i zmiany ( 2-godzinny podcast Ruby Rogues ) ( Jej fantastyczna książka )
Twórca Railsów David Heinemeier Hansson o potoku zasobów i problemach z układem kodu, które poprawia ( kluczowe wideo RailsConf )
Tworzenie własnego klejnotu ( Rubygems.org HOWTO )
Powodzenia w twoich projektach!
źródło
W bibliotekach Ruby nazywane są klejnotami, patrz http://www.ruby-lang.org/en/libraries/ i są używane w taki sam sposób jak biblioteki klas .NET.
źródło