Йерархия на контролерите

В повечето релсови проекти, които съм виждал, структурата на контролера няма организация и проектът расте сам. В големи проекти това води до огромни контролери (с десетки действия), а условните филтри се разтягат на цял екран. Разбирането на такъв код не е лесно.

След като работих с голям брой релсови проекти, разработих подход за организиране на йерархия от контролери, което направи възможно унифицирането на тяхната структура и опростяването на кода.

Най-високо ниво

На първо място, удобно е да поставите основните пространства от имена на проекта на най-високо ниво, като web, mobile, api, feeds и други. В този случай административният модул ще се намира в web.

йерархия

Вътре в API можете също да изберете подмодули, разделени по версия, например v1, v2. Или направете папки на най-високо ниво api1, api2 и т.н. връзка: freelancing-gods.com/posts/versioning_your_ap_is

Използвам тази структура дори в най-простите случаи. Практиката показва, че всеки от тези компоненти може лесно да бъде добавен, когато никой не го е планирал.

За всеки модул се създава Namespace::ApplicationController, за да не се смесва логика, подходяща за конкретни пространства от имена.

йерархия

Но ще има малки разлики в маршрутизирането за различните модули. Web се ​​определя като обхват. В резултат на това ще получим помощници без ненужни префикси, но за останалото се използва пространство от имена.

контролерите

Вложени ресурси

В този случай също би било разумно да се създадат модули за съответните ресурси.

йерархия

И за всяко пространство от имена ще има свой собствен ApplicationController, съдържащ общи модулни методи.

имена

За всички контролери, намиращи се в този модул, ще бъдат наличниcurrent_section без филтри.

Контролерите стават все по-малки и по-прости. Разглеждането на структурата на контролерите вече разказва много за това как е организиран проектът и какво може да се очаква в конкретен контролер. Много условни филтри са изчезнали. Тестването е опростено; Единен организационен подход;

Също така, за удобство и еднородност, контролерите за въвеждане на пространство от имена се наричат ​​добре дошли. И те се свързват в маршрути чрез root :to => 'welcome#index' в съответния обхват. Реален пример:

Помислете как да организирате контролери, като използвате реален пример. Да кажем, че е необходимо да се направи интеграция с facebook.

Разделен подход:

В този случай все още не се знае нищо за потребителя, но когато интеграцията се промени (например настройката за автоматично споделяне) или изтриване, ние работим с конкретен потребител. Това може да се реализира, например, така:

В резултат на това вместо един контролер получихме два (но може би повече, ако задачата го изисква), но в същото време всички методи са групирани по случаи на използване.

И тук можете да получите грант за тестов период на Yandex.Cloud. Необходимо е само да въведете "Habr" в полето "секретна парола".