我有一個定義如下的類:
trait BigService {
def A
def D
def E
/* etc */
}
class BigServiceImpl(...) extends BigService {
def A = _
private def B = _ // uses func A, and BigService's parameters
private def C = _ // uses func B, and BigService's parameters
def D = _ // uses func C, and BigService's parameters
/* other members */
}
我想將私有成員移動到一個單獨的檔案中,但問題是它們都相互依賴以及大類的引數/其他成員。
有沒有辦法將類分成多個部分?
uj5u.com熱心網友回復:
我確信可以拆分和重構任何代碼,但這個問題非常抽象,因此很難提供任何具體的建議。所以這里有一些你可以采用的原則。
組合與繼承。假設您BigService是使用 some Database,WebService/API等的實際業務服務類。您可以使用組合將這些組件添加到您的服務中,而不是從不同的類中繼承它們。
考慮反轉函式依賴關系。通常公共方法將取決于私有方法,而不是相反。這可能是你的關鍵。提取許多具有單一目的的小方法,然后您將能夠看到如何將它們與它們的依賴項一起移出到不同的類中。切線記住控制反轉。
使用高階函式將行為與實作分離。如果private def B使用函式A和一些類成員,您可以將其表示為 HOF:def B(functionA: (...) => ..., someArg: T)或類似的。
Scala 為您提供 OOP 和 FP 的強大功能,因此您可以利用兩者進行重構。他們的關鍵是理解底層函式型別:什么取決于什么。如果您使函式成為純粹的、單一用途的和通用的,那么您將顯著減少依賴關系。
Cake Pattern 是一種值得商榷的方法,但它可能適合您的需求。您混合了所有這些功能的實作,并在基本特征中保持抽象的依賴關系。
我可以繼續說下去,但重點是嘗試以更線性的方式構建代碼,其中依賴項只指向一種方式而不形成圓圈。即依賴圖A -> B -> C優于A -> C, C -> B, B -> A.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/422298.html
標籤:
