Scala модель-представление-ведущий, черты - PullRequest
1 голос
/ 26 мая 2010

Я фанат модели Мартина Фаулера (устарела) модель-представление-презентатор. Я пишу класс представления Scala, содержащий несколько классов кнопок. Я хотел бы включить методы для установки свойств действий кнопок, которые будут вызываться докладчиком. Типичный фрагмент кода выглядит так:

private val aButton = new JButton
def setAButtonAction(action: Action): Unit = { aButton.setAction(action) }

Этот код повторяется для каждой кнопки. Если бы в Java / Scala был препроцессор C, я бы создал макрос для генерации этого кода, учитывая имя кнопки (пожалуйста, никаких лекций о пороках препроцессора C) Этот код, очевидно, очень многословен и повторен. Есть ли лучший способ сделать это в Scala, возможно, с использованием черт?

Пожалуйста, проведите лекции о scala.swing. Я ищу общую схему здесь.

1 Ответ

4 голосов
/ 26 мая 2010

Scala меньше о явных методах установки и получения, чем java. Вместо этого используйте абстрактные поля для определения открытого интерфейса. Как насчет чего-то вроде этого:

trait ActionUser {
  def setAction(action:Action):Unit
}

trait Container {
  val aButton:ActionUser
}

trait ContainerImpl {
  val aButton = new JButton with ActionUser
}

Классы, работающие против Container, смогут получить доступ только к setAction, тогда как внутренние методы видят его как JButton.

Еще одно замечание: C использует макросы для сокращения дублирования кода. Scala использует множественное наследование признаков, чтобы выполнить то же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...