2017-05-08 31 views
0

我有一個特點,代表了一些模塊,暴露出一些公共方法(覺得服務):暴露保護成員作爲公衆自我tyes

trait X { 
    def exposeMe: AService = ... 
    def keepMeHidden: BService = ... 
} 

然後,我有一個Y模塊,需要服務從XY的客戶還需要X提供一項服務。但我不希望他們只依賴這一項服務,而要依靠整個X。我想要「出口」一種服務是公開的。

trait Y { this: X => 
    def exposeMe2: AService = exposeMe 
} 

這有效,但有沒有辦法讓方法名保持不變?

回答

1

簡短的回答:問題Edition後

trait X { 
    def exposeMe: Int = 12 
    def keepMeHidden: Int = 41 
} 

trait XComponent { 
    def x: X 
} 

trait Y { this: XComponent => 
    def exposeMe: Int = x.exposeMe 
} 

更新。

問題是你烤了一半蛋糕,然後想從這個複雜的組件中提取一層。正確的做法是要求你真正需要的:

trait Y { this: AServiceComp => 
    def exposeMe: AService = aService.exposeMe 
} 

AServiceComp實現可以採用單AService實施或使用new XImpl.exposeMe(恕我直言最後是奇怪)進行。

+0

我更新了我的問題。這些方法不是實際的方法,而是服務的獲取者。而X已經是一個組件/模塊。 –