在Java項目中,我們有一個包含許多方法脂肪服務類:我應該將該方法從服務移至其自己的類,還是不?
@Service
@Transaction
public class FatService {
@Autowired
private FatRepository fatRepository;
public void doSomethingSpecial() {
// complex logic
fatRepository.save(foo);
fatRepository.save(bar);
}
public void doSomething1() {}
public void doSomething2() {}
public void doSomething3() {}
public void doSomething4() {}
public void doSomething5() {}
public void doSomething6() {}
public void doSomething7() {}
public void doSomething8() {}
}
此服務旨在提供對代碼庫的所有類事務邊界。它有一些數據庫操作。如果我們關心交易,我們只需要維護這個類。
但它很胖,我發現有一些方法只用於其他單個類,例如, doSomethingSpecial()
,它只有在Special
課堂上使用:
@Component
class Special {
@Autowired
private FatService fatService;
doSomething() {
// do something first
fatService.doSomethingSpecial();
// do something last
}
}
我不喜歡的邏輯分爲兩個不同類別,所以我移動doSomethingSpecial()
方法從FatService
到Special
:
@Component
class Special {
@Autowired
private FatService fatService;
doSomething() {
// do something first
doSomethingSpecial();
// do something last
}
@Transactional
private doSomethingSpecial() {
// this method is move from FatService
fatService.save(foo);
fatService.save(bar);
}
}
公告我仍然在方法doSomethingSpecial
上保留@Transactional
註釋。還添加了save
方法FatService
:
public void save(Object obj) {
fatRepository.save(obj);
}
但我的同事說,我不應該將其移動到Speical
,因爲我們有兩個不同的類,這使得代碼難以維持,如果交易展開到的管理事務所有的代碼庫。
我想知道什麼是最佳解決方案?
- 我不想邏輯分成不同的類,只是因爲交易
- 我仍然希望交易管理容易
謝謝但很抱歉,我無法理解第一段。你同意提供單一的服務類或幾個服務類嗎?我們是否需要將交易始終保持在服務層? – Freewind
第一段說的是,將所有transactionsl方法放在一個類中並不能縮放:最終會有數百個方法在一個類中。所以很顯然,你應該有幾個事務性的服務類。 –
現在清除,謝謝:) – Freewind