Подтвердить что ты не робот

Scala и интерфейсы

В Java я обычно объявляю весь свой домен как interface s, возможно, с каким-то Factory, чтобы получить реализацию. Отчасти это связано с тем, что я настолько стар, что я помню, когда некоторые уровни устойчивости требовали классов реализации для подкласса определенного класса, но также чтобы я мог легко:

  • макет объектов для тестирования
  • прокси-объекты во время выполнения при необходимости
  • предоставляют различные реализации

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

Было ли это необычным в Scala -land, если я объявляю все объекты домена abstract? Удерживают ли эти точки выше Scala?

4b9b3361

Ответ 1

Scala имеет черты, которые являются интерфейсами на трещине. По правде говоря, это то, что интерфейсы должны были быть, по общему признанию, существуют ограничения, когда дело доходит до конструкторов, но это не очень важно, учитывая тот факт, что если у вас есть два интерфейса, которые имеют требования к конструктору, те же проблемы.

Тогда есть частичные методы, и во многих отношениях многие из хороших объектно-ориентированных принципов проектирования, основанных на управлении зависимостями, можно было бы почти рассматривать как способы получения единиц работы, которые являются более сложными, вам действительно нужно задаться вопросом. Вместо того, чтобы работать только на входы и выходы метода или предопределенные точки, в которых используется объект/метод стратегии, вы обладаете большей гибкостью.

Добавьте к этому сопутствующие объекты и все неожиданные фабрики и намного больше стали намного более тривиальными.

Учитывая, что вы действительно можете избежать использования интерфейсов повсюду, и с более мощной системой generics, некоторые из того, что делается с интерфейсами, втягиваются там.

В целом, глядя на код Scala, он имеет тенденцию быть довольно разложенным, и интерфейсы, по-видимому, не являются основным инструментом в этом.

Ответ 2

Это действительно продуманный вопрос.

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

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