2014年10月5日 星期日

[iThome 第七屆鐵人賽 13] Service層 - 概念篇

在這一篇將會看所謂的Service層。爲什麽需要Service層?並且Service層包含了什麽東西,並且在使用上,會給我們帶來什麽便利。

什麽是Service層?

這邊提到的層就是英語所謂的Layer。而Layer就是logical separation of set of functionality (邏輯性的切割一組功能)。舉例來說,和儲存有關的功能就屬於Data Access Layer。

Layer的主要作用和所謂的SoC(Separation of Concern)是一樣的概念,每一個Layer有屬於自己的範圍。

在一般任意的Application裡面,通常都有至少3個Layer。Presentation Layer、Service Layer和Data Access Layer。

Presentation Layer屬於任何和畫面有關的部份。

Service Layer 屬於比較偏商業邏輯層。

Data Access Layer - 任何Application最終都需要儲存資料,而Data Access Layer就是儲存資料的層級。

這三個Layer組起來就是常見所謂的3 Layer Application。

爲什麽需要Service層

在Mvc裡面有個3字口訣:

  1. Model要 :表示處理邏輯都在這邊
  2. Controller要:Controller只負責組裝ViewModel的資料和選擇呈現的View
  3. View要:不要有過多的邏輯和運算,這邊只是要呈現資料的template

這邊需要注意到的是Controller。

由於預設的scaffolding產生出一個基本的CRUD的時候會在Controller裡面直接實例一個DbContext,並且在Action裡面直接和DbContext溝通,導致和容易就把程式邏輯寫在Action裡面。但是這個對於整個程式的彈性是不好。

因為假設別的地方也需要用到一樣的邏輯去產生對應的ViewModel,寫在Controller裡面,就沒有辦法共用這個邏輯。

而Service層才是適合做這件事情。

3 Layer Application在Mvc裡面的對應

基本上來說,在Mvc和3 Layer Application的對應大概是:

3Vjfc+IsFP1reOxODDHGR7V292E70xln9scjJajMYnAI/upf34u5mETar9avbrt9ceRALnDO4XITQkeL7VfDlvNbnQtF4ijfEnpN4jhLevDrgF0FxGlUATMj8wrq1MBEPggE/bCVzEXZGmi1VlYu2yDXRSG4bWFTrdpTLNnMh6+BCWcqRH/K3M5xD3Fa49+EnM39NJ20X/WUdudj5GLKVspe7SHoc90L5mPhrrYRspFggB0C2FyyorWiB60XLcCIsqYKdytxWTjHvTa5MC1IyeJPkzY6BuWM1vCg+7fYjoRy6nll4vt+Gk/70263y7Mk5VdVnJtThx/4NKLAxf3fkMjomqkVbv8OuIDwzEpdQM93toNdH6ti9KrIhQvaIXS4mUsrJkvGXe8GfAvYWhgrwQoDJWeOfKsdOpVKjbTSFY80TYfxDax1ONWFRbN2shN2iUy4SQQejVoBODtCL4Q1O2eNo3OC56afVM1N7Usa4ZB505MeZCj07BC6phn+INMnsk4D1n9IsQGEjLukH5MMQkYj4MRopc6g/wIEUtomsBN3AwY7vScY9MS/KYGoXoPAiTBrCQx8WsfGFKd5H8ui2g3GA4pFkQ+M0RtoccXKUvKAJzqEQTdA6V6Hk1kTeeuiCTkzQkHCWrcz+FP7x0fvtIQ5a3N743pz+/TgQ5R6ZbjAp5r59YVAB9F8IMvMTNgg0F6Ow37OUwhv1YZCWD18hOSBbvG0eJreJXlgCdUg6ppZBsiAc1GWnzeF0N673nq4x0+aQrIjro9P/skp5DiQF+0vpBAslz9mCmnTkkShly+WQpIkTaeM34ONWBSJCKvs11sZCDG7XwBFX3pd3/6NPIqttM0+aLoueJUZliC69eEKXcAcFYYHwY0JjsWR5U9R5M2PRdJ9wc2nHosg0OVu1kBtb9ZXq/28oP9thH9ByaC0OVfJoNi6oJLhixcg/rqPBsulgusb33yb72K3a07GPdIfkCxx+DAi2TUZpyTrkSz8aAE5DcQZMiwDOGjlPh0E9cFC5rl7Jrji9m2M91yqPM8FvjQ4FiEsyKjHmtnUZ9hXZFNo1t9EKhHrT1t0/Ag=
3層式架構和Mvc對應

結語

在這一篇瞭解到了透過增加Service層,我們能夠讓一些商業邏輯更容易的被共用,並且整個Application的SoC更加的清楚。

在下一篇將會看到,如何建造Service層,並且Controller如何使用。

沒有留言 :

張貼留言