2015-02-13 2 views
1

Есть ли у кого-нибудь мысли или лучший способ обработки общих полей, которые пересекают несколько классов классов ... например, у меня есть следующий класс case;Общие переменные класса случая

case class Customer(
    name: String, 
    refId: String = ReferenceIdGenerator.generateRefId("CUSTOMER"), 
    createdAt: DateTime = DateTime.now, 
    updatedAt: DateTime = DateTime.now, 
    id: Option[Long] = None) 

Последние четыре переменные повторяются в каждом классе случаев «модель/домен» в моем примере приложения. Есть ли лучший способ удалить этот общий шаблонный код?

Одна мысль заключалась бы в том, чтобы создать «общий» класс корпуса и, по крайней мере, код шаблона ограничен, например;

case class CommonFields(refId: String...etc) 
case class Customer(name: String, common: CommonFields) 

Мысли?

ответ

-3

Это обычное явление - это просто совпадение, поэтому это не шаблон и не дублирующий код.

+1

«повторение в каждом XY» не похоже на совпадение – Bergi

+1

@ Bergi, что это звучит, не имеет значения. – rightfold

+0

Не совсем. Я бы сказал, что здесь есть ясный случай для наследования, или что бы это ни было, что Scala обеспечивает аналогичное (я не программист Scala) –

4

Одна мысль была бы создать «общий» случай класса и, по крайней мере шаблонный код ограничен, например

Да, это правильное решение, при условии, что это работает хорошо все, что вы использовать для взаимодействия с базой данных. Если вы используете Slick, см. Также Extending SLICK Tables in a DRY manner.

+1

, если это распространено, вы можете, вероятно, назвать его чем-то, что имеет смысл в вашем домене, «CommonFields» ничего не значит, но, может быть, AuditData (созданный: DateTime, обновленный: DateTime). – johanandren

+0

@johanandren Да, хороший момент. –

+0

Во-вторых, этот подход, который я использовал в прошлом. Было бы неплохо, если бы был простой способ сделать это с DRYness, например, иметь базовый конструктор, который вы могли бы объединить с конструкторами подкласса, чтобы по-прежнему представлять плоский интерфейс для кода клиента. Это может быть возможно в бесформенном или использовании макросов; Я никогда этого не делал. – acjay

Смежные вопросы