tag:blogger.com,1999:blog-757034363076866663.post762558150796997838..comments2023-07-19T18:59:57.943+08:00Comments on mrkt 的程式學習筆記: ASP.NET Web Api - Help Pagemrkt 的程式學習筆記http://www.blogger.com/profile/17962620480380791777noreply@blogger.comBlogger12125tag:blogger.com,1999:blog-757034363076866663.post-60542394340034473952017-02-26T00:20:35.681+08:002017-02-26T00:20:35.681+08:00哈哈...
本來問題是 ViewModel 放在非 Web api 專案下不會產生 help pag...哈哈...<br />本來問題是 ViewModel 放在非 Web api 專案下不會產生 help page 要用的 XmlDocument,<br />結果就這樣扯到 viewmodel 要放哪裡的責任分派問題啦~<br />感謝 K 大的指教,受益良多<br /><br />Anonymoushttps://www.blogger.com/profile/12278535413557295628noreply@blogger.comtag:blogger.com,1999:blog-757034363076866663.post-15660418333367976692017-02-25T23:26:55.229+08:002017-02-25T23:26:55.229+08:00筆記:職責區分清楚,不貪心、不做多也不多做筆記:職責區分清楚,不貪心、不做多也不多做阿修https://www.blogger.com/profile/10908092088270264824noreply@blogger.comtag:blogger.com,1999:blog-757034363076866663.post-7162256862244934702017-02-25T23:10:33.539+08:002017-02-25T23:10:33.539+08:00看到這邊讓我感到困惑... 留言已經完全偏離文章主題
我沒有看過你的專案,也不明白你的專案架構與做法...看到這邊讓我感到困惑... 留言已經完全偏離文章主題<br />我沒有看過你的專案,也不明白你的專案架構與做法和需求,我也不清楚你們專案的分層是怎麼去區分與定義,<br />就如同我前面所說,專案的架構與實作都各有不同,會依據實際情況去做調整,<br />但保持一個原則,那就是職責區分清楚,不貪心、不做多也不多做<br />以上<br />mrkt 的程式學習筆記https://www.blogger.com/profile/17962620480380791777noreply@blogger.comtag:blogger.com,1999:blog-757034363076866663.post-305205929130584782017-02-24T23:08:09.688+08:002017-02-24T23:08:09.688+08:00其實我有用過 Automapper ,所以類別對映轉換不是我想拉到 Service 去組 DTO(o...其實我有用過 Automapper ,所以類別對映轉換不是我想拉到 Service 去組 DTO(or ViewModel )的原因,<br />而是因為想把 linq 篩選資料的邏輯拉到 Service 層給多個展示層的專案調用,這樣才不會在多個不同專案的 controller 出現同樣的篩選資料邏輯Anonymoushttps://www.blogger.com/profile/12278535413557295628noreply@blogger.comtag:blogger.com,1999:blog-757034363076866663.post-84650012296432273362017-02-24T23:05:17.878+08:002017-02-24T23:05:17.878+08:00作者已經移除這則留言。Anonymoushttps://www.blogger.com/profile/12278535413557295628noreply@blogger.comtag:blogger.com,1999:blog-757034363076866663.post-25911564536268008682017-02-24T13:34:45.997+08:002017-02-24T13:34:45.997+08:00這邊是說展示層要做的事情不要因為共用或是想要少做一些事情而直接使用服務層或資料存取層的類別物件當作對...這邊是說展示層要做的事情不要因為共用或是想要少做一些事情而直接使用服務層或資料存取層的類別物件當作對外輸出資料的容器型別.<br /><br />你所提的那篇文章,作者是基於 DDD 的架構下去做專案的,而 Domain Model 是其專案的基礎,從上而下去貫穿,這必須要整個專案在一開始的規劃就要去做整體的考量.<br /><br />我會比較堅持 ViewModel 是在展示層裡,這是因為同一個 Solution 裡的展示層專案有可能會有多個,例如有 MVC 或 WebApi 等等,可能是不同產品,但是都是參考使用同樣的 Service 和 Repository,但每個產品所輸出與顯示的資料有所差異,這時候如果所有的展示層專案都是使用 Service 的輸出型別作為 ViewModel 時,就會發生有A產品出現B產品所要顯示的資料,雖然可以另外去做調整,但互相影響的情況將會頻繁出現,這就造成維護上的困難,所以各個網站或服務的輸出 ViewModel 不適合在服務層裡去做.<br /><br />另外就是服務層與資料存取層的設計,有很多人的服務層與資料層都是會先入為主的去依據某些商業邏輯或條件去設計和實作,這就已經先一步去侷限和限縮了服務層與資料存取層的定義和功能,例如會員資料,有些人取得會員資料會直接就去組合各種條件或是加上很多邏輯的 SQL Command 或 LINQ Expression,所取得的資料就已經是有被調整過的,而且是為了某些特定操作,因為已經是被設計過的,所輸出的資料就自然是最後要丟到 client 的內容,這時候就會覺得還要切 service 然後轉 DTO,最後還要給展示層去 mapping 到 ViewModel 這一串步驟就會覺得煩,所以就乾脆去簡化過程,直接撈出資料的型別就當作 viewmodel 給丟出去....<br /><br />至於你所提到自己的專案,我是不清楚你有沒有使用過 automapper 之類的別對映轉換套件,其實對映轉換的設定成本並不大,所以對我而言,遇到你的情況,我還是會堅持去切開來分別做,或者是去將這些有可能共用資料的部分去做服務化,而不是用每個專案去重複複製或參考的方式去加入服務層的資源.<br /><br />就我而言,在我的工作環境裡,為了避免後續維護與互相雜亂參考或複製的情況出現,所以嚴格執行職責區分與分層操作的方式,因為時常出現某些功能的商業邏輯要修改,此時去調整服務層,當服務層完成後,再通過單元測試,最後展示層再去做局部處理避且通過單元測試,就可以確保修改完成是正確的,另外也可以在日後出現問題時第一時間就可以釐清是哪一層的問題.<br /><br />人云亦云,各家門派都有不同,最重要的還是要看專案與團隊開發規範而訂,不是誰說了就算,至少我所堅持的就是那一層該要去做的就在該層去處理,不要去為了方便而走捷徑.mrkt 的程式學習筆記https://www.blogger.com/profile/17962620480380791777noreply@blogger.comtag:blogger.com,1999:blog-757034363076866663.post-65734344537925253312017-02-24T11:45:52.558+08:002017-02-24T11:45:52.558+08:00想請問一下 Kevin 大的意思是 ViewModel 應該在 Controller 中組成,
而非...想請問一下 Kevin 大的意思是 ViewModel 應該在 Controller 中組成,<br />而非在 Service 層就組好 ViewModel 後 return 給 Controller 嗎?<br />本人最近遇到了一種狀況是不同 Project 的 Controller action(Web API) 提供的資源幾乎一樣,<br />且因為這些 Project 是不同的站台以及客戶需求的關係必須每個站台都要有這些 API,<br />如果在每個 Controller 組成 ViewModel 勢必會有一堆重複的 Code ,所以拉就到 Service 去組 ViewModel。<br />還有我看到一篇文章似乎也是在 Service 層就將 DTO 物件組好如下:<br />https://buildplease.com/pages/repositories-dto/<br />所以想請教一下 Kevin 大組 DTO (或 ViewModel )的地方到底在哪邊比較合適呢?<br /> Anonymoushttps://www.blogger.com/profile/12278535413557295628noreply@blogger.comtag:blogger.com,1999:blog-757034363076866663.post-7385429212279062192017-02-22T13:23:54.994+08:002017-02-22T13:23:54.994+08:00服務層的輸出類別不應該也能夠被直接拿來作為 webapi 輸出的型別 (viewmodel 或稱為 ...服務層的輸出類別不應該也能夠被直接拿來作為 webapi 輸出的型別 (viewmodel 或稱為 outputmodel)<br />一個 wepapi 的輸出類別,除非是很簡單的內容,通常一個輸出的資料有可能是要呼叫多個 service,<br />然後這些叫用這些 service 所產出的結果,最後才組成要輸出的資料內容,<br /><br />如果什麼事情都是由一個 service 去做完,然後 webapi 的 controller 裡 action 方法只有去呼叫及使用那個 service 的產出,最後再拿這個 service 輸出物件直接往外丟,我會覺得這個 service 要麼就是太過於簡單,不然就是職責過多。<br /><br />在 mvc 或 webapi 的 controller action 方法要做的事情就是依據情境去呼叫一到多個 service,然後取得這些 service 的輸出,將這些 service 的輸出做組合,最後才回傳給使用端<br /><br />如果 repository 或 service 的輸出類別就可以直接作為外部輸出的內容,那麼就不需要去分層了,mrkt 的程式學習筆記https://www.blogger.com/profile/17962620480380791777noreply@blogger.comtag:blogger.com,1999:blog-757034363076866663.post-24511694001576192322017-02-22T12:55:50.429+08:002017-02-22T12:55:50.429+08:00因為我將Service層放到類別庫的專案裡,Service會丟ViewModel給Web API,所...因為我將Service層放到類別庫的專案裡,Service會丟ViewModel給Web API,所以把ViewModel也放到類別庫的專案裡amu607https://www.blogger.com/profile/00803894440488679631noreply@blogger.comtag:blogger.com,1999:blog-757034363076866663.post-26838927024104246182017-02-22T12:35:14.229+08:002017-02-22T12:35:14.229+08:00為何 ViewModel 會需要放在類別庫專案?為何 ViewModel 會需要放在類別庫專案?mrkt 的程式學習筆記https://www.blogger.com/profile/17962620480380791777noreply@blogger.comtag:blogger.com,1999:blog-757034363076866663.post-81953985821847752472017-02-22T12:17:18.608+08:002017-02-22T12:17:18.608+08:00你好,想請問關於XmlDocument的問題
我的方案裡有Web API的專案,跟一個類別庫
V...你好,想請問關於XmlDocument的問題<br /><br />我的方案裡有Web API的專案,跟一個類別庫<br /><br />ViewModel的程式是放在類別庫裡,從Web API專案產生XmlDocument的時侯 不會有 ViewModel的註解內容<br /><br />我試過把ViewModel放到WebAPI專案下,產生XmlDocument的時侯 會有 ViewModel的註解內容<br /><br />請問要怎麼解決這個問題? 謝謝amu607https://www.blogger.com/profile/00803894440488679631noreply@blogger.comtag:blogger.com,1999:blog-757034363076866663.post-4255931600699400872016-09-10T17:49:27.877+08:002016-09-10T17:49:27.877+08:00謝謝分享~ 非常實用
同時Swashbuckle 也很方便!!謝謝分享~ 非常實用<br />同時Swashbuckle 也很方便!!todomato bloghttps://www.blogger.com/profile/14096304147181690057noreply@blogger.com