2013-05-23 3 views
6

Что такое «правильный» способ псевдонима объекта в Scala?Объекты пакета Scala с указанием атрибутов типа/значения

Например, предположим, что мне нужно RoleGroup в объеме в различных частях моего приложения (который разбит на подпроектов SBT)

trait RoleGroup 
object RoleGroup { 
    case object ADMIN  extends RoleGroup 
    case object MEMBER extends RoleGroup 
    case object PUBLIC extends RoleGroup 
} 

Поскольку я не хочу, чтобы повторно импортировать RoleGroup, я решил псевдоним RoleGroup признака и объекта в тип и VAL аналоги так:

package com.developer 
package controller 

trait ControllerBase { 
    type RoleGroup = controller.RoleGroup 
    val RoleGroup  = controller.RoleGroup 
    ... 
} 

, а затем объекты пакета подпроекта может продлить вспомогательный признак, чтобы получить импорт бесплатно:

package com.client 

package object member 
    extends com.developer.controller.ControllerBase 

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

ответ

6

Это разумный подход. Фактически it's being applied in the Scala library сам.

Существует всего два воображаемых уровня элементов, которые вам нужны для псевдонима: тип (например, черты и классы) и значение (т. Е. Объекты, пакеты и значения). Вы покрываете их обоих.

+1

+1, интересный, это должен быть рецепт псевдонима, затем ;-) типы для признаков/классов и vals для объектов и др. Определенно можно уменьшить количество импортных шаблонов с таким подходом – virtualeyes

Смежные вопросы