Я разработал много кода на Java и пробовал в Groovy и Haskell, который теперь привел меня к Scala.Scala тестируемый код с наследованием и микшинами
Я чувствую себя относительно комфортно с функциональной стороной Scala, но я нахожу себя немного шатким по объектно-ориентированному дизайну в Scala, потому что он немного отличается от Java, в частности из-за особенностей/микширования.
Я стремлюсь писать код, который, как проверяемый, насколько это возможно, что в моем развитии Java всегда пересчитываются в центр внимания на
- неизменности где можно
- Предпочитает инъекцию состояния конструкторов
- ВСЕГДА идет для состава вместо наследования (сильно зависит от и, возможно, чрезмерной реакции на this post on SO)
Теперь я пытаюсь приземлиться мои ноги на этой новой территории Скала, и мне трудно понять, какой подход мне следует пойти здесь, , в частности, следует ли мне начинать использовать наследование для некоторых целей.
Программирование Scala (Wampler и Payne, O'Reilly, второе издание) имеет раздел с соображениями («Хороший объектно-ориентированное проектирование: экскурс»), и я прочитал несколько постов на SO, но я не видел явных упоминаний о контроле за тестированием. Книга предлагает этот совет по использованию наследования:
- Абстрактный базовый класс или признак подклассы один уровень с помощью конкретных классов, включая тематические классы.
- Конкретные классы никогда не подклассы, за исключением двух случаев:
- классов, которые смешиваются в других видах поведения, определенном в чертах (...)
- Test-только версии для содействия автоматизированной установки teting.
- Когда подклассы кажутся правильными, рассмотрите поведение разбиения на черты и смешайте их в этих чертах.
- Никогда не разделяйте логическое состояние между границами типа parent-child.
Некоторые рыть на SO также предполагает, что sometimes mix-ins are preferable to composition.
Таким образом, в сущности, у меня есть два вопроса:
Существуют ли общие случаи, когда было бы лучше, даже с учетом проверяемость, использовать наследование?
Смешивание предлагает хорошие способы повышения тестируемости моего кода?
Спасибо. Я очень ценю этот ответ, поскольку он дает хорошие комментарии к моим ссылкам и прямым ответам на вопросы. –
Нет проблем, Scala - интересный язык, и хорошо понимать, как некоторые из этих более эзотерических языковых особенностей соответствуют тем, что люди уже делали там в мире. Это был хороший вопрос. –
хм ... судя по его большому тучному нулевому балу, я полагаю, это могло быть лучше. Но я получил свой ответ, это важная часть. –