Я немного поработал с Django, и мне очень нравится его модель проекта / приложения: вы можете создать проект Django, собрав одно или несколько приложений Django. Эти приложения могут быть автономными, или некоторые приложения могут быть построены поверх других приложений. Приложение может легко полагаться на модели другого приложения, а также на свои контроллеры (парни из Django называют их «представлениями») и даже свои представления («шаблоны» на языке Django-говорить).
Сейчас я работаю над относительно масштабным проектом Ruby on Rails, и я удивлен, увидев, что в Rails, очевидно, нет простого способа сделать то же самое. По сути, в Rails один проект = одно приложение. Наш проект начался как огромное монолитное приложение, и сейчас мы пытаемся выяснить, как разделить его на более мелкие куски.
Например, наше текущее приложение позволяет нам управлять партнерами и контрактами (среди прочего). Я хотел бы иметь приложение «Партнеры», которое будет управлять нашими партнерами (адрес, контакты и т. Д.), И приложение «Контракты», которое будет управлять нашими контрактами с нашими партнерами. Приложение «Контракты» будет опираться на приложение «Партнеры» (но чтобы избежать круговой зависимости, я бы хотел, чтобы приложение «Партнеры» не знало о приложении «Контракты»).
Пока я вижу следующие основные параметры:
- заставить эти приложения взаимодействовать через запросы REST (каждое приложение будет действовать как веб-служба): это хорошо, но, похоже, запрещает повторное использование представлений других приложений. Например, если в приложении «Партнеры» есть хорошая страница для отображения сведений о партнере, и если я хочу отобразить эту страницу, слегка измененную, в середине страницы сведений о контракте, я не вижу другого способа сделать это. это значит, что приложение «Контракты» запрашивает у партнера «Партнеры» сведения о партнере через запрос REST (он получает представление объекта, а не представление), а затем копирует / вставляет исходный код страницы сведений о партнере из раздела « Партнеры »в приложении« Контракты ».
- превращает эти приложения в плагины: не так приятно и немного сложнее, но, кажется, позволяет повторно использовать модель и виды
- используйте svn external для обмена некоторыми моделями из приложения в приложение: просто, но безобразно.
Спасибо за советы.