В нескольких разных местах моего приложения мне нужно взять Seq[SalesRow]
и вернуть Map[String,SalesRow]
, где строка — это название страны.
Мне нужно использовать это в нескольких местах. Например, я беру список всех SalesRows и получаю глобальную разбивку продаж по странам. Но в других местах я хочу разбить свои продажи по месяцам, а затем по странам (так что Map[Month,Seq[SalesRow]]
становится Map[Month,Map[String,Seq[SalesRow]]]
) — в третьих местах я хочу разбить свои продажи по дням, а затем по странам.
У меня вопрос: куда мне поместить (небольшое) количество логики, которая принимает Seq[SalesRow]
и возвращает карту стран в строки? Прямо сейчас я добавляю его в метод объекта-компаньона, SalesRow.byCountry(rows : Seq[SalesReport]
. Это оптимально?
Мне пришла в голову немного более безумная идея: создать неявное преобразование из Seq[SalesRow]
в EnhancedSalesRowSeq
, которое имеет метод экземпляра byCountry
. Мне это нравится, потому что операция применима к любой последовательности SalesRows.
Это хорошая идея?
Является ли добавление логики к объекту-компаньону лучшим выбором, или есть варианты получше?
Спасибо.