考慮具有存儲庫層(持久性),服務層(應用程序)和Web(UI)層的Web應用程序。體系結構:何處放置不依賴於任何其他服務或存儲庫組件的服務類
考慮一個組件(即ExternalProgramExecutor),它不是一個UI組件,也不依賴於服務或存儲庫層中的任何組件。
的問題是:
- 是否該組件屬於服務層?
- 該組件是否屬於持久層?
- 是否應該與這些圖層分開處理?如果是這樣,這部分架構的名稱是什麼?
考慮具有存儲庫層(持久性),服務層(應用程序)和Web(UI)層的Web應用程序。體系結構:何處放置不依賴於任何其他服務或存儲庫組件的服務類
考慮一個組件(即ExternalProgramExecutor),它不是一個UI組件,也不依賴於服務或存儲庫層中的任何組件。
的問題是:
鑑於你的問題的限制,我會問你的獨立組件的目的是什麼?它主要是圍繞某些數據(這會使其成爲持久層的一部分),還是它是應用程序(應用程序層)的域或業務邏輯或工作流程的一部分?像一個外部任務執行器,我會傾向於認爲是你的應用程序層的一部分。
從概念上講,'ExternalProgramExecutor'看起來像一個服務,因此它屬於服務層。
走在了服務層的細節,有兩種可能性:
這種脫節保持與從更務實點(實現):
個人而言,我會添加其他問題的問題清單@Robert問:
對我來說,我通常會在我的架構中添加一個新的實用程序/框架組件,這是我放置完全獨立的組件的地方,以後可以在其他應用程序中重用。
我傾向於將服務視爲您的域模型上的接口,並且因爲聽起來這種關係不存在,所以聽起來並不像這種意義上的服務。
你的持久層調解與你的數據存儲的通信,但是它聽起來像這個組件沒有太多要做。
那麼它屬於哪個層?它真的需要屬於一個嗎?通過問這些問題,聽起來你已經花時間正確地組織你的對象了。如果你有一個多餘的組件,你既可以:
A)拖放到在那裏使用的最
B)拖放到自己組裝和停止擔心誣指:)
層甲多層(軟件)體系結構使用不同的層,以分配一個應用程序的責任,所以我們有:
從點3,如果改變 「ExternalProgramExecutor」 並不需要對其他層任何變化。我想這本身就值得一層。 我在一個具有類似目的的項目上使用了一個名爲「Ext」的圖層。
如果更改需要任何更改,請將其添加到需要修改的圖層。
希望它有幫助。
好,ExternalProgramExecutor
是本身就是一個服務,因爲你的應用程序使用的本作一個外部組件。
顯然,如果您不打算將該組件的source code
作爲應用程序項目的一部分,那麼您不能將該服務放入您的應用程序中。因此,您實際上將在您的項目中擁有超過該服務/組件的Gateway
。爲了使它SOLID
,你的網關將是抽象,你的問題是其中你應該引用該抽象網關。
答案完全取決於ExternalProgramExecutor(以及Gateway)提供的功能以及您的項目如何使用該功能。從應用程序的頂層到底層(DAL - > ... - > UI),而抽象功能不是圖層的一部分。找到合適的圖層後,使用該圖層中的網關,底層在運行時不應該知道具體網關的存在。