3 回答

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超6個(gè)贊
根據(jù)我的經(jīng)驗(yàn),一個(gè)好的設(shè)計(jì)可以if-else
盡可能的減少。所以我更喜歡將它注入到你的每個(gè)子類中。因此,將來(lái),如果依賴項(xiàng)也有子類,您將擁有更大的靈活性。

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

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超2個(gè)贊
我建議為您的實(shí)際實(shí)現(xiàn)(AppleFarm、AnimalFarm ..)創(chuàng)建命名 bean 并注入 FarmRepo。有了你的工廠,你真正的實(shí)現(xiàn)將不會(huì)由 Spring 管理(沒(méi)有 beans)。
@Component("appleFarm")
@RequiredArgsConstructor <- this is a Lombok feature check it out
public class AppleFarm implements Farm {
private final FarmRepo repo;
...
}
添加回答
舉報(bào)