[Rails] Services

為什么避免控制器肥胖屹徘?

(1) 控制器存在的意義是獲取數據和顯示數據,避免混入與模型相關的操作。
(2) 控制器中通常是方法調用而非實現懂昂,復雜或過長的代碼會導致邏輯混亂千所。
(3) 控制器中的代碼不用測試狂魔,因為都是調用其他的方法,所以應保持簡單淫痰。

控制器該做的事:
-用戶驗證授權有關的邏輯
-管理從請求中帶來的參數
-選擇正確的模型調用方法
-渲染視圖或重定向

為什么避免模型層肥胖最楷?

注意單一職責原則,保證特定模型只處理它分內的事情待错,
如發(fā)送通知籽孙,更新其他模型的先關數據都不是他分內的事。
關于這些事情及相關邏輯可以提取并放在新的類(PORO)中火俄。

為什么避免過度使用回調犯建?

過度使用回調會使得代碼的可讀性降低,并且不利于測試和維護瓜客,有時還會有意想不到的錯誤适瓦。通常我們使用回調處理簡單的邏輯,比如保存前更新自身的數據谱仪,保存后更改關聯模型中的計數列玻熙。如遇到復雜的邏輯,如保存后創(chuàng)建一條關聯記錄芽卿,發(fā)一條通知信息等揭芍,這些會導致邏輯十分混亂。對于以上這種情況卸例,創(chuàng)建新的類(PORO)称杨,并這些邏輯放入特定的方法中。好處:邏輯清晰筷转,易于測試和維護姑原。核心:單一職責原則,去除不必要的依賴呜舒。

為什么使用Service锭汛?

service object implements the user interactions with the app.
service contains business logic that coordinates other artefacts.

為了保證控制層和模型層代碼的簡潔干凈,我們需要創(chuàng)建一些純Ruby類,來處理先關用戶與模型層交互的邏輯唤殴。這部分類的作用通常是將用戶的輸入作為實例變量般婆,獲取相關數據,計算朵逝,或是調用其他服務蔚袍,返回想要的結果。

Plain Old Ruby Object (PORO)

|= app
|- actions => system action, such as sending email
|- decorators => make view beautiful, generate json
|- policies => user authorization related stuff
|- services => request params (input), query among models
|- supports => third party services, such as amazon
|- updaters => updater attrs with specified methods

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末配名,一起剝皮案震驚了整個濱河市啤咽,隨后出現的幾起案子,更是在濱河造成了極大的恐慌渠脉,老刑警劉巖宇整,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異芋膘,居然都是意外死亡鳞青,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門索赏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盼玄,“玉大人贴彼,你說我怎么就攤上這事潜腻。” “怎么了器仗?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵融涣,是天一觀的道長。 經常有香客問我精钮,道長威鹿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任轨香,我火速辦了婚禮忽你,結果婚禮上,老公的妹妹穿的比我還像新娘臂容。我一直安慰自己科雳,他們只是感情好,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布脓杉。 她就那樣靜靜地躺著糟秘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪球散。 梳的紋絲不亂的頭發(fā)上尿赚,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機與錄音,去河邊找鬼凌净。 笑死悲龟,一個胖子當著我的面吹牛,可吹牛的內容都是我干的冰寻。 我是一名探鬼主播躲舌,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼性雄!你這毒婦竟也來了没卸?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤秒旋,失蹤者是張志新(化名)和其女友劉穎约计,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體迁筛,經...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡煤蚌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了细卧。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尉桩。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖贪庙,靈堂內的尸體忽然破棺而出蜘犁,到底是詐尸還是另有隱情,我是刑警寧澤止邮,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布这橙,位于F島的核電站,受9級特大地震影響导披,放射性物質發(fā)生泄漏屈扎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一撩匕、第九天 我趴在偏房一處隱蔽的房頂上張望鹰晨。 院中可真熱鬧,春花似錦止毕、人聲如沸模蜡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哩牍。三九已至,卻和暖如春令漂,著一層夾襖步出監(jiān)牢的瞬間膝昆,已是汗流浹背丸边。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留荚孵,地道東北人妹窖。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像收叶,于是被迫代替她去往敵國和親骄呼。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理判没,服務發(fā)現蜓萄,斷路器,智...
    卡卡羅2017閱讀 134,672評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,190評論 25 707
  • 申湘黔绸硕,聽你說7號是你的生日,我沒有發(fā)紅包也沒有特別的祝福魂毁,按照你之前給曾先生文科生的浪漫玻佩,我也想為你寫一些字。 ...
    彩虹色的豬閱讀 545評論 1 7
  • 我在等一個人席楚,等一場美麗的邂逅咬崔,我總是在心里默默地想,如果有一天相愛了酣胀,我和你會用怎樣的一種方式相遇刁赦。是用那一種款...
    惟愿你安閱讀 1,286評論 14 9