Почему я должен работать усерднее для подавания моей заявки направляющих, вписывается в Архитектуру RESTful?

В Java все переменные, которые вы объявляете, на самом деле являются «ссылками» на объекты (или примитивы), а не самими объектами.

При попытке выполнить один метод объекта , ссылка просит живой объект выполнить этот метод. Но если ссылка ссылается на NULL (ничего, нуль, void, nada), то нет способа, которым метод будет выполнен. Тогда runtime сообщит вам об этом, выбросив исключение NullPointerException.

Ваша ссылка «указывает» на нуль, таким образом, «Null -> Pointer».

Объект живет в памяти виртуальной машины пространство и единственный способ доступа к нему - использовать ссылки this. Возьмем этот пример:

public class Some {
    private int id;
    public int getId(){
        return this.id;
    }
    public setId( int newId ) {
        this.id = newId;
    }
}

И в другом месте вашего кода:

Some reference = new Some();    // Point to a new object of type Some()
Some otherReference = null;     // Initiallly this points to NULL

reference.setId( 1 );           // Execute setId method, now private var id is 1

System.out.println( reference.getId() ); // Prints 1 to the console

otherReference = reference      // Now they both point to the only object.

reference = null;               // "reference" now point to null.

// But "otherReference" still point to the "real" object so this print 1 too...
System.out.println( otherReference.getId() );

// Guess what will happen
System.out.println( reference.getId() ); // :S Throws NullPointerException because "reference" is pointing to NULL remember...

Это важно знать - когда больше нет ссылок на объект (в пример выше, когда reference и otherReference оба указывают на null), тогда объект «недоступен». Мы не можем работать с ним, поэтому этот объект готов к сбору мусора, и в какой-то момент VM освободит память, используемую этим объектом, и выделит другую.

29
задан the Tin Man 11 March 2017 в 22:15
поделиться

6 ответов

Если я иду дальше стандартных CRUD-действий с моими моделями, я обычно просто добавляю методы по мере необходимости. Поиск - это то, что я добавляю ко многим контроллерам, но не ко всем, поэтому я добавляю его и поддерживаю маршруты в обычном режиме:

map.resources :events, :collection => { :search => :get }

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

8
ответ дан Codebeef 28 November 2019 в 02:05
поделиться

Я рассматривал бы search как особый случай index. Оба действия возвращают набор ресурсов. Параметры запроса должны определить вещи как страница, предел, порядок сортировки и поисковый запрос.

, Например:

/resources/index # normal index
/resources/index?query=foo # search for 'foo'

И в resources_controller:

before_filter :do_some_preprocessing_on_parameters

def index
  @resources = Resource.find_by_param(@preprocessed_params)
end

Что касается index_full и search_by_name, Вы могли бы посмотреть на разделение Вашего текущего контроллера в два. Существует запах о том, что Вы описали.

Однако Вы абсолютно правы, что нет никакого смысла в принуждении Вашего приложения пользователю успокоительные маршруты, когда это ничего не поставляет [более чем 116]. Для принятия решения посмотрите, как часто Вы используете успокоительных помощников маршрута ресурса в формах и ссылках. Если бы Вы не используете их, я не обеспокоился бы им.

13
ответ дан the Tin Man 28 November 2019 в 02:05
поделиться

REST не указывает, что у вас не может быть дополнительных видов. Ни одно реальное приложение не сможет использовать только предоставленные действия; Вот почему вы можете добавлять свои собственные действия.

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

Что касается того, должны ли они быть ручными маршрутами или новым контроллером, это зависит от того, насколько отчетливой является активность. Ваше альтернативное представление, если оно предоставляет полный набор операций CRUD (создание, чтение, обновление, удаление), было бы хорошо, если бы вы были в новом контроллере. Если у вас есть только альтернативное представление к данным, я бы просто добавил действие альтернативного представления.

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

5
ответ дан Godeke 28 November 2019 в 02:05
поделиться

По-моему, они, возможно, пошли немного от направляющих сюда. Что произошло с DRY?

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

0
ответ дан Jeremy 28 November 2019 в 02:05
поделиться

Я не буду объяснять больше о REST, так как думаю, что в этом вопросе дан ответ, однако я немного расскажу о маршруте по умолчанию.

Моя главная проблема с маршрутом по умолчанию в том, что если у вас есть несколько сайтов, использующих одно и то же приложение Rails, это может выглядеть ужасно.

Например, могут быть контроллеры, которые вы не хотите, чтобы люди могли видеть в одном приложении:

http://example1.somesite.com/example_2/foo/bar/1

сравните это с

/:controller/:action/:id

. контроллер example_2 / foo, панель действий и id 1

Я считаю это основным недостатком маршрута по умолчанию в Rails, и это то, что RESTful маршруты (с расширениями поддоменов) или только именованные маршруты (map.connect 'foo' ...) могу исправить.

0
ответ дан the Tin Man 28 November 2019 в 02:05
поделиться

Чтобы остаться УСПОКОИТЕЛЬНЫМИ в Вашем дизайне, необходимо заново продумать то, что Вы называете ресурсом.

В Вашем примере выставочное действие для поискового контроллера, (поисковый ресурс) является направлением, чтобы остаться успокоительным.

шахта In, у меня есть контроллер панели инструментов (шоу) и контроллеры для единственных полей оперативного ecditors (шоу и обновление)

-1
ответ дан theschmitzer 28 November 2019 в 02:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: