公司一位同事導入.Net Core MVC ,切分成
cshtml-(ajax)->controller-(DI)->service-(DI)->repository
假如我有A,B controller各自call C,D service,而C,D Service 卻又會存取到部份共同Table(Repo),同事提供的做法是直接複製一份相同的method(在C,D Service 同時有FetchDept()這個method),但我在想是否有更好的作法?
想請問在這種架構下,service的定義是什麼呢?(因為同事說這是.net core建議的架構,但我上網卻又google不到)
那是三層式架構,
但是兩個Repo存取到同一個table,
好像哪裡怪怪的...
假如我有A,B controller各自call C,D service,而C,D Service 卻又會存取到部份共同Table(Repo),同事提供的做法是直接複製一份相同的method(在C,D Service 同時有FetchDept()這個method),但我在想是否有更好的作法?
取到部份共同Table(Repo),這裡多加一個E Service來做資料存取,供C,D共用即可
MVC就View,Controller,Model
Service可以當成Model的一部分,處理資料、邏輯、資料存取等都在Model內
我最一開始也是這樣想,但當系統功能愈多時,E Service 應該會變成最大集合,如下
C,D Service會用到的repo放在E
D,F Service會用到的repo也放在E
F,G Service會用到的repo也放在E
.....
那如果E Service 只會有對EF存取的method,到最後是不是就變成有點像長在EF上的DAL(DataAccessLayer)
用了快一個月了,發現這樣做可能會有個issue
各自service 用到了不同的repo,所以在採用不同的constructor傳入各自的repo去引用 E Service。
假設
C用到了dept 所以在 public C(Repository dept):base(dept)
D用到了empl 所以在 public D(Repository empl):base(empl)
有天C突然想使用empl的資料base.按下下就看到提示有fetchEmpl可以用,直到執行時,才會發現沒有將empl傳給E Service
如此導致原本在開發階段就可以發現的錯誤,變成了runtime exception
以上,供參考