iT邦幫忙

0

.NET Core MVC 開發規範

  • 分享至 

  • xImage

公司一位同事導入.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不到)

看更多先前的討論...收起先前的討論...
coona iT邦新手 5 級 ‧ 2022-05-18 01:05:36 檢舉
我在實作上應該會創立一個E和一個介面IntetfaceE,
E裡面包含FetchDept的共用方法,InterfaceE規範要實作FetchDept的方法,讓E繼承IntetfaceE,然後讓C和D繼承E
kawa0710 iT邦研究生 5 級 ‧ 2022-05-18 08:50:06 檢舉
建議在資料庫建個DeptView, 讓1個Service專責[增I][刪D][修U] Dept這個Table, 另1個Service讀取DeptView
canrong iT邦新手 2 級 ‧ 2022-05-18 09:24:32 檢舉
依照我的開發經驗,將DB Model與其共用邏輯可以另開一lib專案給其他專案參考,介接程式如,smtp(s)、ftp(s)等,也另開一專案,如果有特殊需設計類似Queue的連線介接則有可能選用service的寫法。其實要將方案拆到多細是以團隊為主。
gmlin iT邦新手 5 級 ‧ 2022-05-18 18:04:08 檢舉
coona
我在實作上應該會創立一個E和一個介面IntetfaceE,
E裡面包含FetchDept的共用方法,InterfaceE規範要實作FetchDept的方法,讓E繼承IntetfaceE,然後讓C和D繼承E
--------------------------------
您說的與下方deh大的回答是類似的,但這麼做我也有點疑惑,統一回答在下方了

kawa0710
建議在資料庫建個DeptView, 讓1個Service專責[增I][刪D][修U] Dept這個Table, 另1個Service讀取DeptView
--------
目前是類似這樣,但我只有拆到method,即在同一Service裡有FetchDept(from view),CreateDept(to Table),UpdateDept(to Table)

canrong
依照我的開發經驗,將DB Model與其共用邏輯可以另開一lib專案給其他專案參考,介接程式如,smtp(s)、ftp(s)等,也另開一專案,如果有特殊需設計類似Queue的連線介接則有可能選用service的寫法。其實要將方案拆到多細是以團隊為主。
--------------------------
感謝,目前就是將Service視為一個project的模式進行的
google 試試 "三層式架構"
gmlin iT邦新手 5 級 ‧ 2022-06-05 15:59:00 檢舉
google 試試 "三層式架構"

沒看到有Service Layer ....不過也有可能是我keywords下錯
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
小魚
iT邦大師 1 級 ‧ 2022-05-18 08:10:43

那是三層式架構,
但是兩個Repo存取到同一個table,
好像哪裡怪怪的...

gmlin iT邦新手 5 級 ‧ 2022-05-18 17:17:25 檢舉

您可能誤會了,或是我沒表達清楚

應該是C,D Service各自有一個method,共同存取同一個Repo

0
deh
iT邦研究生 1 級 ‧ 2022-05-18 08:44:08

假如我有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內

gmlin iT邦新手 5 級 ‧ 2022-05-18 17:48:00 檢舉

我最一開始也是這樣想,但當系統功能愈多時,E Service 應該會變成最大集合,如下
C,D Service會用到的repo放在E
D,F Service會用到的repo也放在E
F,G Service會用到的repo也放在E
.....

那如果E Service 只會有對EF存取的method,到最後是不是就變成有點像長在EF上的DAL(DataAccessLayer)

gmlin iT邦新手 5 級 ‧ 2022-06-05 16:08:14 檢舉

用了快一個月了,發現這樣做可能會有個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

以上,供參考

我要發表回答

立即登入回答