In several different places in my application, I need to take a Seq[SalesRow]
and return a Map[String,SalesRow]
, where the string is the name of a country.
I need to use this in several places. For example, I take a list of all SalesRows and get a global breakdown of sales by country. But in other places, I want to break down my sales by month and then by country (so Map[Month,Seq[SalesRow]]
becomes Map[Month,Map[String,Seq[SalesRow]]]
) - in still other places, I want to break down by day and then by country.
My question is: where do I put the (small) amount of logic that takes a Seq[SalesRow]
and returns a map of countries to rows? Right now, I'm putting it in a companion object method, SalesRow.byCountry(rows : Seq[SalesReport]
. Is that optimal?
A slightly crazier idea occurred to me, which is to create an implicit conversion from Seq[SalesRow]
to EnhancedSalesRowSeq
, which has a byCountry
instance method. This appeals to me, because the operation is applicable to any sequence of SalesRows.
Is this a good idea?
Is adding the logic to the companion object my best choice, or are there better options?
Thanks.