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