как RESTful-ize сложного контроллера - PullRequest
3 голосов
/ 29 июня 2009

У меня есть контроллер с действиями:

class GameController < ApplicationController
before_filter :set_titles

def prestart
end

def wait
end

def play (game)
end


def button
end

def finish
end


def set_titles
end

set_titles получит заголовок страницы (и другие общие свойства для всех действий) Все остальные действия что-то проверяют и создают вид.

Как RESTful-ize это. Я могу думать только о создании контроллера Wait_player, контроллера play_game и т. Д., У всех них будет только действие show. Но это выглядит неуклюже и труднее понять, что все эти связанные действия в одном контроллере.

Ответы [ 3 ]

5 голосов
/ 29 июня 2009

Прежде всего, я бы подумал о том, является ли дизайн RESTful лучшим выбором для этого контроллера. Некоторые домены просто не вписываются в REST, и если вы пытаетесь втиснуть их в него, вы умножаете работу и путаницу. Я не знаю вашего приложения достаточно хорошо, чтобы ответить на это, но об этом стоит подумать.

Как уже упоминалось, REST имеет дело с существительными. Глядя на то, что вы написали, я вижу главное существо game . Таким образом, чтобы сделать RESTful, то, что вы называете «предварительным запуском», может быть new, а ваша «игра» может быть create. «Готово» может быть destroy. «Подождите» может просто остаться «ждать». Не каждое действие в контроллере RESTful должно быть одним из стандартных семи. Я не думаю, что есть какой-нибудь RESTful эквивалент «wait».

У вас также есть кнопка . Трудно сказать, не зная больше о вашем приложении, но, возможно, у него должен быть свой собственный контроллер. Обычно с приложением RESTful Rails каждый отдельный объект получает свой собственный контроллер с одним или несколькими из семи стандартных действий.

"Как RESTful-ize это. Я могу думать только о создании Wait_player контроллера play_game контроллера и т. Д."

Этот подход больше похож на размышления о создании контроллера для каждого действия , которое вы хотите выполнить. Кстати, попробуйте подумать о контроллере для каждой вещи , с которой вы хотите работать. Например, вместо контроллера WaitPlayer сделайте его контроллером Player с show, new, create и т. Д. (Стандартные действия RESTful), а затем дополнительно возможно действие wait.

2 голосов
/ 29 июня 2009

Это не просто выглядит неуклюже и сложнее, это точно. ОТДЫХ не для всего

Но вы можете связать pre_start для создания, завершения для удаления, воспроизведения для обновления и ожидания для показа, тогда вы все еще можете поместить действие кнопки где-нибудь (я предлагаю придумать лучшее имя)

PS: set_titles должно быть private

1 голос
/ 29 июня 2009

Вам нужно думать о существительных в вашей системе, а не о глаголах. REST имеет дело с существительными - создание, чтение, обновление и удаление вещей. Какие вещи в вашей системе?

Похоже, у вас есть Титулы, Игра и т. Д.

API-интерфейсы RESTful требуют другого подхода к решению проблем.

Эта ссылка говорит о сервисах RESTful WCF, но материал о мышлении RESTful должен также применяться в вашем домене.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...