亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

具有相同依賴性的多個嵌套類還是具有更大范圍的嵌套類更好?

具有相同依賴性的多個嵌套類還是具有更大范圍的嵌套類更好?

人到中年有點甜 2023-03-09 14:03:31
在我的 Spring Boot 應用程序中,我正在創建一個工廠,用于創建具有相同接口和依賴項的不同對象,如下所示。@Componentpublic class FarmFactory {    @Autowired    private FarmRepo farmRepo;    public IFarm create(FarmType type) {        if (type == type.APPLE) {            return new AppleFarm(farmRepo);        } else if (type == type.ANIMAL) {            return new AnimalFarm(farmRepo);        } else {            return new EmptyFarm(farmRepo);        }    }}我想知道通過將 FarmRepo 依賴項注入每個農場子類(蘋果、動物、空)來限制 FarmRepo 依賴項的范圍是否更好?;蛘撸绻麑蝹€依賴項保留在工廠的更高范圍內會更好?;蛘撸梢詫⒁蕾図?FarmRepo 與類型一起傳遞到 create 方法中,但不確定依賴項范圍的經驗法則是什么。
查看完整描述

3 回答

?
慕哥9229398

TA貢獻1877條經驗 獲得超6個贊

根據我的經驗,一個好的設計可以if-else盡可能的減少。所以我更喜歡將它注入到你的每個子類中。因此,將來,如果依賴項也有子類,您將擁有更大的靈活性。



查看完整回答
反對 回復 2023-03-09
?
大話西游666

TA貢獻1817條經驗 獲得超14個贊

我假設您的 IFarm 實現是模型類。在模型中擁有存儲庫不是一個好習慣。您應該考慮將不同 IFarm 實現的創建移動到 FarmRepo。

如果 IFarm 實現是某種管理業務邏輯的服務類,那么您應該讓 spring 處理它,向它們注入 FarmRepo 實例。在那種情況下,您最好考慮使用抽象類而不是使用 IFarm,因為 FarmRepo 是它們之間的共同依賴項。

使用簡單的工廠方法來實例化所需的運行時類型沒有錯,如果需要的話,它需要在某個地方完成,它可以幫助您根據 OCP(開閉原則)獲得有效的設計,防止您根據需要更改行為在類型參數上,而是使用多態性。


查看完整回答
反對 回復 2023-03-09
?
一只斗牛犬

TA貢獻1784條經驗 獲得超2個贊

我建議為您的實際實現(AppleFarm、AnimalFarm ..)創建命名 bean 并注入 FarmRepo。有了你的工廠,你真正的實現將不會由 Spring 管理(沒有 beans)。


@Component("appleFarm")

@RequiredArgsConstructor <- this is a Lombok feature check it out

public class AppleFarm implements Farm {


private final FarmRepo repo;

...

}


查看完整回答
反對 回復 2023-03-09
  • 3 回答
  • 0 關注
  • 149 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號