Я хочу знать, как управлять большим количеством глубоко вложенных параметров типа. Код это Скала. Ответы приветствуются на любом языке.
Рассмотрим некоторые объекты конфигурации
trait Source
case class File(path: String) extends Source
case class URL(url: String) extends Source
trait Format
case class CSV(delimiter: String) extends Format
case class JSON extends Format
case class Data(format: Format, source: Source)
но как я ограничен в информации о моем типе, например Я не могу
def find_delimiter(config: Data) = config.format.delimiter
Итак, я параметризирую
case class Data[F <: Format, S <: Source](format: F, source: S)
и теперь я могу указать, что я работаю с CSV
def find_delimiter[S <: Source](config: Data[CSV, S]) = config.format.delimiter
Все хорошо. Но если мои объекты конфигурации имеют глубину не один, а четыре, а мои объекты конфигурации имеют гораздо более длинные имена, мы можем получить что-то вроде
def fn(config: DataSourceConfig[
CSVConfig[ColumnDataTypeConfig[DeeplyNestedConfig[SuperDeeplyNestedConfig], OtherDeeplyNestedConfig]],
URLConfig[FetchRetryConfig[HTTPDeeplyNestedConfig]]
]) = ??? // use deeply nested attributes here
что беспорядок, чтобы читать, и я пошел на свет на параметры. Как я могу справиться с этим?
На самом деле, псевдонимы типа непрактичны, так как они будут размножаться.