2013-05-23 7 views
6

स्कैला में किसी ऑब्जेक्ट को उपनाम करने का "सही" तरीका क्या है?स्काला पैकेज ऑब्जेक्ट्स विशेषता प्रकार/मूल्य उपनाम

उदाहरण के लिए, मान लीजिए कि मैं अपने आवेदन के विभिन्न भागों (जो एसबीटी उप परियोजनाओं में टूट जाती है)

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

में दायरे में एक RoleGroup जरूरत है जब से मैं बार-बार RoleGroup आयात करने के लिए मना नहीं करते, मैं उर्फ RoleGroup विशेषता करने का फैसला किया और इतने तरह के प्रकार और वैल समकक्षों में वस्तु:

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

संबंधित मुद्दे