В Scala множественное имя объекта для контейнера открытых статических методов? - PullRequest
1 голос
/ 23 сентября 2010

Я написал черту Scala с именем Cache [A, B], чтобы предоставить API для кэширования. Кэш имеет следующие методы: asyncGet (), asyncPut (), asyncPutIfAbsent (), asyncRemove ().

У меня будет несколько статических методов, таких как getOrElseUpdate (key: A) (op: => B). Я не хочу, чтобы такие методы использовались как абстрактные определения в признаке Cache, потому что я не хочу, чтобы каждая реализация Cache обеспечивала реализацию для нее, когда она может быть написана один раз с использованием методов async * ().

Рассматривая Google Guava и части библиотеки Java, они помещают общедоступные статические функции в класс, который является множественным числом имени интерфейса, поэтому я бы использовал "Caches".

Мне действительно нравится эта схема именования, хотя я мог бы использовать объект-компаньон Cache. Рассматривая большую часть моего кода, многие из моих сопутствующих объектов содержат закрытые значения val или def, поэтому пользователям моего API необходимо просмотреть объект-компаньон, чтобы увидеть, что они могут использовать оттуда или что-либо еще в этом отношении.

Наличие объекта с именем "Caches" согласуется с Java, а также проясняет, что там есть только публичные функции. Я склоняюсь к использованию «объектных кешей» вместо «объектных кешей».

Так что люди думают?

Ответы [ 2 ]

10 голосов
/ 23 сентября 2010

Черты Scala - это не просто другое имя для интерфейсов Java.Они могут иметь конкретные (реализованные) члены, как значения (val и var), так и методы.Поэтому, если есть унифицированная / обобщенная / совместно используемая реализация метода, его можно поместить в черту, и его не нужно тиражировать или разбивать на отдельные классы.

3 голосов
/ 23 сентября 2010

Я думаю, что ошибка начинается с "использования нескольких статических методов".Почему статические методы?Если вы объясните, зачем вам статические методы, это поможет понять, каким должен быть дизайн.

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