2013-05-23 19 views
6

Qual è il modo "corretto" per creare un alias di un oggetto in Scala?Oggetti pacchetto Scala con tratto che fornisce alias di tipo/valore

Per esempio, diciamo che ho bisogno di un RoleGroup portata in varie parti della mia applicazione (che è suddiviso in sottoprogetti SBT)

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

Dal momento che non voglio importare ripetutamente RoleGroup, ho hanno deciso di alias RoleGroup tratto e oggetto in tipo e la Val controparti in questo modo:

package com.developer 
package controller 

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

e poi sub progetto oggetti di pacchetto possono estendere il tratto aiuto per ottenere le importazioni gratuitamente:

package com.client 

package object member 
    extends com.developer.controller.ControllerBase 

Sto facendo lo stesso per gli altri oggetti caso che devono essere in ambito. È una soluzione ragionevole? cioè ci sono degli svantaggi/problemi di cui ho bisogno di essere a conoscenza? Tutto ciò che compila e le pagine di test del browser sembrano funzionare esattamente come nell'applicazione pre-refactoring, ma non sono sicuro che questo sia l'approccio migliore.

risposta

6

È un approccio ragionevole. In effetti it's being applied in the Scala library stesso.

Ci sono solo due livelli immaginabili di membri necessari per l'alias: tipo (cioè caratteri e classi) e valore (cioè oggetti, pacchetti e valori). Li copri entrambi.

+1

+1, interessante, che deve essere la ricetta alias quindi ;-) tipi per tratti/classi e val per oggetti e altri. Sicuramente può ridurre un sacco di standard di importazione con questo approccio – virtualeyes