Нужно ли избегать размышлений при разработке библиотек scala?
Принимать argonaut
например, в некоторых наших проектах, когда есть необходимость обрабатывать JSON, люди будут использовать для этого аргонавт и жестко кодировать поля, например:
implicit def AddressCodecJson: CodecJson[Address] =
casecodec3(Address.apply, Address.unapply)("street", "number", "post_code")
Если есть большой класс case, список будет очень длинным:
implicit def AddressCodecJson: CodecJson[Address] =
casecodec12(Address.apply, Address.unapply)("street", "number", "post_code", "...", "...", "...", "...", "...", "...", "...", "...", "...")
Мой вопрос заключается в том, почему мы должны жестко их кодировать, а не получить поле с помощью отражения?
Есть какие-то технические проблемы, или люди просто не любят использовать отражение при разработке библиотек Scala?
1 ответ
Я не очень ясно, пытаетесь ли вы анализировать JSON в общем. Я предполагаю, что вы хотите проанализировать любой JSON в общем. Если это так, вместо создания неявного преобразования для каждого из классов case, вы можете использовать json4s
сделать это. В этом случае вам не нужно предоставлять преобразование implcit для каждого класса. Мы широко используем его в нашем проекте. Вам нужно только дать неявный конвертер для каждого типа (например, для: как конвертировать java.sql.timestamp, java.sql.Date, Joda-Time и т. Д.).
Возможно, эта ссылка может вам помочь.