Я моделирую некоторые типы данных, которые по своей природе имеют много полей.
Тогда у меня есть ужасный код , где конструктор класса имеет длинный список аргументов, а также все его подклассы.
Я сомневаюсь, является ли BuilderPattern хорошим решением для этого.
Например, это универсальный класс Transaction
:
class Transaction(
source: String,
format: String,
id: String,
amount: Double,
currency: String,
senderAccount: String,
senderName: String,
receiverAccount: String,
receiverName: String,
execDate: LocalSate,
createdDateTime: Instant)
Это подкласс A TxTypeA
, который имеет некоторые специальные поля, специфичные для типа A:
class TxTypeA(
source: String,
format: String,
id: String,
amount: Double,
currency: String,
senderAccount: String,
senderName: String,
receiverAccount: String,
receiverName: String,
execDate: LocalSate,
createdDateTime: Instant,
typeAField1: String,
typeAField2: String,
typeAField3: String
) extends Transaction(
source,
format,
id,
amount,
currency,
senderAccount,
senderName,
receiverAccount,
receiverName,
execDate,
createdDateTime)
Это подкласс B TxTypeB
, который имеет некоторые специальные поля, специфичные для типа B:
class TxTypeB(
source: String,
format: String,
id: String,
amount: Double,
currency: String,
senderAccount: String,
senderName: String,
receiverAccount: String,
receiverName: String,
execDate: LocalSate,
createdDateTime: Instant,
typeBField1: String,
typeBField2: String,
typeBField3: String,
typeBField4: String,
typeBField5: String,
typeBField6: String,
typeBField7: String
) extends Transaction(
source,
format,
id,
amount,
currency,
senderAccount,
senderName,
receiverAccount,
receiverName,
execDate,
createdDateTime)
У кого-нибудь есть лучшее решение для этого?
UPDATE:
В моем проекте я создал еще один класс под названием Party
, который обернул Account
и Name
, но это просто избавляет от боли, а не решает проблему в ядре.
case class Party(account: String, name: String)
class Transaction(
source: String,
format: String,
id: String,
amount: Double,
currency: String,
senderParty: Party,
receiverParty: Party,
execDate: LocalSate,
createdDateTime: Instant)