как различать варианты использования композиции и автоматического ввода текста

В Scala есть два инструмента для выражения композиции объектов: оригинальная концепция самотипа и хорошо известная тривиальная композиция. Мне любопытно, в каких ситуациях я должен использовать какие.

Существуют очевидные различия в их применимости. Самотип требует от вас использования черт. Композиция объекта позволяет вам изменять расширения во время выполнения с помощью объявления var.

Опуская технические детали, я могу выделить два индикатора, которые помогут в классификации вариантов использования.Если какой-то объект используется в качестве комбинатора для сложной структуры, такой как дерево, или просто имеет несколько одинаковых типизированных частей (отношение 1 автомобиля к 4 колесам), тогда он должен использовать композицию. Существует крайний противоположный вариант использования. Давайте предположим, что одна черта стала слишком большой, чтобы ее можно было четко наблюдать, и она разделилась. Вполне естественно, что в этом случае вы должны использовать самотипы.

Эти правила не являются абсолютными. Вы можете выполнить дополнительную работу по преобразованию кода между этими методами. например вы можете заменить композицию из 4-х колес самонабором над Product4. Вы можете использовать Cake[T <: MyType] {part : MyType} вместо Cake { this : MyType => }для зависимостей шаблона торта. Но оба случая кажутся нелогичными и требуют дополнительной работы.

Однако существует множество граничных вариантов использования. В отношениях один на один очень трудно решить. Есть ли какое-то простое правило, чтобы решить, какая техника предпочтительнее?

self-type делает ваши классы абстрактными, а композиция делает ваш код многословным. self-type дает вам проблемы с смешиванием пространств имен, а также дает вам дополнительный набор текста бесплатно (вы получаете не просто коктейль из двух элементов, а коктейль из бензина и моторного масла, известный как заправочная бомба).

Как я могу выбирать между ними? Какие подсказки есть?

Обновление:

Давайте обсудим следующий пример:

Шаблон адаптера. Какие преимущества он имеет как с самостоятельным вводом, так и с композиционным подходом?

11
задан ayvango 17 June 2012 в 23:16
поделиться