簡體   English   中英

強制客戶端代碼調用Service類而不是Repository類

[英]Force client code to call Service classes instead of Repository classes

我正在使用架構客戶端代碼--->業務服務--->存儲庫。

存儲庫類實現IRepository接口,Service類將IRepository作為其客戶端代碼傳遞給它的構造函數中的參數。

現在問題是,客戶端代碼是否應該能夠直接調用存儲庫類,只是實例化它以將其傳遞給服務類? 在我看來,客戶端代碼應該只能通過在調用存儲庫之前應用業務規則的服務類來調用存儲庫類函數。 因為直接調用存儲庫類而不通過業務層將根據域業務規則簡單地導致無效數據。

但問題是如何防止客戶端代碼直接調用存儲庫中的方法,同時根據抽象的IRepository接口保留服務類。 換句話說,我需要使客戶端代碼能夠實例化存儲庫類,然后將它們傳遞給服務類,但同時無法直接調用存儲庫類中的方法。

理想情況下, ClientCode不應該了解IRepository或其實現。 這可以通過控制反轉(IoC)容器來完成

IoC容器將注入的實現IRepository到您的Service為您而無需客戶端代碼中有一個認識IRepository或它的實現。 這樣,您可以在服務中保留依賴注入,而無需打開IRepository接口和ClientCode實現。

對於C#,IoC容器的兩個示例是AutoFacNinject

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM