ruby on Rails dto objects - Где вы их храните? - PullRequest
5 голосов
/ 20 июля 2010

Кто-нибудь здесь использует DTO для передачи данных из контроллера в представление? Если да, где бы вы порекомендовали хранить эти файлы? / apps / dtos, и пусть они отражают структуру dir views? Любые рекомендации по тестированию этих животных с rspec?

Ответы [ 4 ]

7 голосов
/ 20 июля 2010

Соглашение Rails не должно использовать распределенные уровни для уровней контроллера и представления. Разделение есть, но оно логично и относительно тонкое / легковесное по сравнению с типами фреймворков, которые вы видите на земле Java.

Основная архитектура состоит в том, что контроллер устанавливает переменные экземпляра, которые доступны в соответствующем представлении. В общем случае переменные экземпляра будут экземплярами модели или коллекциями экземпляров модели (поступающими из базы данных). Модели должны быть ядром вашей бизнес-логики. Контроллеры координируют потоки данных. Представления отображают это. Помощники используются для форматирования отображаемых значений в представлении ... всего, что принимает значение модели и делает что-то только для целей отображения (вы можете обнаружить, что многократно используемый вспомогательный метод на самом деле может быть лучше для самой модели).

Однако, если вы обнаружите, что представление нуждается в знании многих различных моделей, вам может оказаться проще заключить модели в другой объект на более высоком уровне абстракции. Ничто не мешает вам создавать неактивные объекты записи, которые собирают и координируют ваши фактические модели AR. Затем вы можете создать эти объекты в контроллере и сделать их доступными для просмотра. Обычно вам нужно быть достаточно плотным на уровне сложности в контроллере, чтобы нуждаться в подобных вещах.

Я бы предпочел бросать такие объекты в приложения / модели - Rails уже загружает все в этом каталоге, облегчает работу с точки зрения конфигурации / ожидания.

1 голос
/ 25 января 2018

Пожалуйста, не слушайте другие ответы. Они ужасны Рельсы-помощники ужасны. Использование рельсовых моделей везде ужасно. Я прошу вас, спроектируйте ваше приложение правильно и решите, нужны ли вам DTO или нет. Решите, действительно ли вы хотите иметь рельсовые модели для обработки вещей, отличных от связи с базой данных. Решите, хотите ли вы на самом деле не иметь слой между вашим приложением и рельсами, и так далее, и так далее. Rails design подходит только для небольших приложений или приложений, которые нужно разрабатывать очень быстро. Но если это не что-то тривиальное и вы планируете его развивать в течение некоторого времени, пожалуйста, потратьте свое время на правильный дизайн. Не бойтесь нарушать удобства Rails. И да пребудет с тобой сила.

0 голосов
/ 20 июля 2010

То, что мне сказали, это то, что, как правило, это работа, которую выполняют «помощники». Они в основном помогают форматировать объекты модели для просмотра в представлении. Так что это определенно не отображение концептов 1-1, но это мышление в мире рельсов

0 голосов
/ 20 июля 2010

Если вы пришли из .NET или J2EE фона, вы можете подумать о таких шаблонах, как DTO.Вы можете или не можете быть удивлены (и, возможно, счастливы) узнать, что Rails не делает ничего подобным образом по соглашению.

В частности, вообще нет необходимости формально передавать (или хранить) сериализованные объекты междуконтроллеры и представления.Переменные экземпляра (обычно значения атрибутов модели), созданные в контроллере, доступны в представлении бесплатно, как это предусмотрено платформой, без каких-либо дополнительных усилий по программированию.

...