我正在從一個非常硬編碼的Java實現轉移到一個非常模塊化的Scala實現,並且我已經停止了翻譯我的應用程序的一部分。基於案例對象的參數
我正在看的函數從格式字符串中產生一條消息。它在數據庫中查找相關信息並使用它來格式化字符串。
public static String getHumanizedMessage(Type type, User user, Long relatedId){
switch(type.getTypeName()){
case NEW_FOO:{
Foo foo = Foo.findById(relatedId);
return String.format(type.getMessage(), user.name, foo.name);
}
case BAR_SHARED:{
Bar bar = Bar.findById(relatedId);
Baz baz = Baz.findById(relatedId);
return String.format(type.getMessage(), user.name, bar.name, baz.name);
}
default:
break;
}
return null;
}
因此,對事物的斯卡拉的一面,我一直試圖實現使用情況的對象的不同類型,所有從基地Type
延伸。
sealed class Type(val name: String)
case object NewFoo extends Type("New Foo")
case object BarShared extends Type("Bar Shared")
問題是,我的申請是模塊化的,在我MessageService
我用不上Foo.findById
,Bar.findById
或Baz.findById
。我希望它在參數列表中收到適當的字符串,但正如您所看到的,參數的數量根據Type
而有所不同。我可以將參數設置爲可選,但是任何調用函數的人都需要根據類型知道哪些參數是必需的,我不喜歡這樣。我想我可以爲每種類型都有不同的函數名稱,但我寧願不要,如果有更好的方法。
恐怕我不能真正按照你的最後一段。你能否改寫/澄清你想要做什麼?這是什麼'MessageService'?你想在哪裏收到適當的字符串? – DCKing
我打算把項目分解成模塊,這些模塊有提供功能的服務。這一切都發生在我的'MessageService'中,它無法訪問'UserService'或'BarService'以調用像'findById'這樣的數據庫方法。所以我的'getHumanizedMessage'不能只把'relatedId'作爲參數並找到它需要的對象。我想採取'字符串'參數。但是我需要的字符串數量並不總是相同的。 – mgeiger