2011-07-21 18 views
11

Breaking a large rails app into smaller apps?Jak mogę zaimplementować modularyzację w aplikacji Rails?

Modularizing Rails applications

Best practice for structuring a 'large' Rails app

mam szybkie pytanie na modułowości w dużej Ruby on Rails App.

Setup:

buduję app rdzenia, który przechowuje informacje o osobach. Posiadam również kilka "modułów", które wykorzystują te informacje na różne sposoby. (np. można wyświetlać informacje o ludziach, inny może wymyślić połączenia i podobieństwa między nimi, itp.).

Pytanie:

Jak zmodularyzowanie tę aplikację efektywnie?

Potencjalne Odpowiedzi:

Od modeli modułów akcji i poglądów z aplikacji bazowej (i siebie) ma sens dla mnie, aby połączyć je w jednej aplikacji. Jednak wraz ze wzrostem aplikacji będzie to oczywiście prowadzić do problemów. To mi sugeruje albo Namespacing kontrolerów i modeli "How to organize controller in moderately large Rails application?" lub za pomocą silników "Modularizing Rails applications".

Ponieważ moduły są w fazie rozwoju, bardzo pomocne jest użycie generatorów szyn, co sprawia, że ​​używanie Silników jest bolesne. Wydaje się również, że podczas gdy silniki są w pełni obsługiwane z punktu widzenia Railsów, nadal wydają się dość hackowate w odniesieniu do braku obsługi generatora i migracji baz danych. Czy ktoś ma doświadczenie w konstruowaniu silników? Wygląda na to, że silniki byłyby świetnym rozwiązaniem, gdybyś miał działającą aplikację i chciałbyś przenieść ją do wtyczki (to znaczy skopiować kod wklejania), ale jeśli aktywnie ją rozwijasz (zmieniając modele itp.) Byłoby to trudne.

Ostatnią rzeczą, którą zobaczyłem, jest używanie wielu aplikacji i jednej bazy danych. Ten sposób wydaje się być królewskim bólem z migracjami i utrzymywaniem modeli prosto itd. Ale myślałem, że również będę o tym myślał.

+0

Dobry sposób łączenia do SO pytania - nie wiedziałem, że istnieje! – Zabba

+1

"Buduję podstawową aplikację, która przechowuje informacje o [czymkolwiek] .Mam też kilka" modułów ", które wykorzystują te informacje w bardzo różny sposób." To może opisać prawie każdą aplikację railsową kiedykolwiek zbudowaną! :-) Czy możesz dokładniej określić swoje sterowniki? Powiedz nam przynajmniej, ile masz bytów. – Rob

Odpowiedz

0
  • Jedna aplikacja, jedna baza danych.
  • Udostępnianie modeli między modułami.
  • Namespace kontrolerów i widoków.
  • Test.
1
0

Można również użyć Rack Middleware do obsługi konkretnych zadań.

W przypadku większości aplikacji Silniki wydają się najlepszym rozwiązaniem - jest to również coś, na co patrzę. Wygląda na to, że możesz łatwo znaleźć w Silniku define generators.

0

W zależności od struktury danych i wzorców dostępu może być przydatne oddzielenie aplikacji na wiele aplikacji, a także, dodatkowo, zapewnienie dostępu do danych przez (RESTful) API.

Z mojego doświadczenia wynika, że ​​pozwala to na tworzenie najlepszych struktur, gdy aplikacja (i) rośnie ze średnich i dużych rozmiarów, i zmusza do myślenia o strukturach i oddzieleniu problemów. Skalowanie jest zwykle łatwiejsze.

1

Nie używałbym silników. Silniki służą do udostępniania funkcji między aplikacjami. To, co chcesz zrobić, to nie udostępniać funkcjonalności, ale ją porządkować.

W celu uporządkowania kodu można zrobić wiele rzeczy.

  • Użyj przestrzeni nazw.
  • Zachowaj cienkie kontrolery.
  • Zachowaj cienkie modele (Tak, modele, zobacz następny punkt)
  • Użyj wzorca interakcji Kontekst danych (DCI).
  • Użyj struktury widgetów, takiej jak Apotomo lub Cells.
  • Testy zapisu, dzięki czemu można refaktoryzować.
  • Weź pod uwagę architekturę zorientowaną na usługi (weź pod uwagę projekt interfejsu API hipermediów), jeśli odpowiedzialność za aplikację wzrasta.

Andrzej ma bardzo dobre artykuły na temat DCI.

http://andrzejonsoftware.blogspot.com/2011/08/dci-patterns-how-to-write-dci-contexts.html

Powiązane problemy