3 回答

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

TA貢獻1817條經驗 獲得超14個贊
我假設您的 IFarm 實現是模型類。在模型中擁有存儲庫不是一個好習慣。您應該考慮將不同 IFarm 實現的創建移動到 FarmRepo。
如果 IFarm 實現是某種管理業務邏輯的服務類,那么您應該讓 spring 處理它,向它們注入 FarmRepo 實例。在那種情況下,您最好考慮使用抽象類而不是使用 IFarm,因為 FarmRepo 是它們之間的共同依賴項。
使用簡單的工廠方法來實例化所需的運行時類型沒有錯,如果需要的話,它需要在某個地方完成,它可以幫助您根據 OCP(開閉原則)獲得有效的設計,防止您根據需要更改行為在類型參數上,而是使用多態性。

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;
...
}
添加回答
舉報