我一直在試圖理解這種新的架構,其名稱可以是洋蔥架構,乾淨的架構,端口和適配器等。在洋蔥式架構中,實體是否應該穿過外層?
如果我把端口和適配器的抽象,當我適應我的應用程序一個特定的端口,我可以給我的應用程序內的端口一個實體嗎?還是我總是應該調整實體,以適應端口?
例如:
說我有一個客戶實體。我有一個使用我的應用程序的用戶界面。我的UI通過Adapter調用getCustomerById(123)。接下來,我的適配器會調用我的應用程序,使用注入的Repository有效地檢索客戶,並且它將對其執行某種格式化操作並記錄,並且一旦客戶準備好就返回到我的用戶界面。我的問題在於,我的Customer對象返回給我的用戶界面。這意味着我的UI具有對Core項目中的Customer類的引用。然後,我的用戶界面繼續使用該客戶對象來做事情,也許改變它的名字等,並最終再次調用適配器到updateCustomer(客戶)。
這可以嗎?我的UI在應用程序內核中使用Customer類是否可以。還是應該讓我的客戶適應一個新的客戶對象,比如說UICustomer,並讓我的用戶界面能夠與之一起工作,在客戶和UICustomer之間在適配器級別來回映射?
謝謝你分享這個回購。它真的爲我回答了一堆問題,但我仍然有一個大問題。你會在哪裏進行業務邏輯/數據有效性檢查?我假設它將在VisitorProcessor中。我對麼? – jgriffin
我在你的例子中看到領域模型是貧血的。看起來您將域邏輯放入Processor類中,但我不確定這是故意還是因爲您的域模型太簡單,並且不需要任何邏輯,並且Processor類是您的服務層。這是我的問題,如果我有一個貧血的領域模型,因此,一個簡單的沒有行爲,我明白,它更容易與UI共享,但如果我有一個複雜的領域模型與很多行爲和深層嵌套的關係,我還應該在我的用戶界面中使用它嗎? –
@jgriffin,數據有效性可以分爲兩種類型。 1)數據類型,2)操作的業務適用性。用嚴格的鍵入來定義你的模型,以確保只有符合類型的數據才能進入。例如,如果你不想使用負數或者不想使用大數字,我們可以使用ushort而不是int數。然後使用外部業務邏輯或規則模式來檢查模型是否對某個特定操作或要調用的命令「有效」。 –