2016-10-01 94 views
1

我的Scala應用程序(阿卡服務)上的一個二傳手有PersonBuilder斯卡拉:一個單獨的對象

PersonBuilder類有一個REST客戶端,獲取一些數據,建立實體之前。

應該永遠只能是在任何一個時間一個實例此PersonBuilder在我的應用程序的

很明顯,我可以在這裏使用一個PersonBuilder對象,但問題是我想在運行單元測試時傳入模擬REST客戶端。

對Scala中被認爲是不好的練習的對象調用setter? 如果完成安全並保證只發生過一次,那麼肯定它是一種可以使用的技術?

很明顯,創建一個封裝了REST客戶端的類也可以完成,但問題是我必須在沒有依賴注入框架的情況下在我的代碼中傳遞這個類。

目前在Scala中是否有任何約定呢?

回答

3
class PersonBuilder(rest: Rest) 
object PersonBuilder extends PersonBuilder(LiveRest) 
object TestPersonBuilder extends PersonBuilder(MockRest) 

如果你不想要構造函數參數,請使用特徵。

trait PersonBuilder { 
    def rest: Rest 
} 
object PersonBuilder extends PersonBuilder { 
    override val rest = LiveRest 
} 
+0

非常有趣的方法,我不知道你能做到這一點 – DJ180

+0

爲感興趣的你有什麼對物體設定方法的想法的事情? – DJ180

+1

@ DJ180如果您使用過濾器,請徹底清洗雙手,以防止手指或袖子上的氣味,用大量水沖洗,返回鍵盤並用上述任一種圖案替換。 :) – flavian