2016-06-24 7 views
0

Я хочу, чтобы создать другую коллекцию в MongoDB для этого у меня есть класс объектов Scala здесь мой кодкак передать различные значения переменного в объекте лестницы

object Factory { 

val connectionMongo = MongoConnection(SERVER) 
val collectionMongo = connectionMongo(DATABASE)("collectionA") 

} 

я хочу, чтобы добавить различные названия коллекции для что я делаю это, как этот класс объекта здесь мой код

object Factory { 

    var COLLECTIONName:String="" 
    def setCollectionName(name:String) 
    { 
     COLLECTIONName=name 
    } 
    val connectionMongo = MongoConnection(SERVER) 
    val collectionMongo = connectionMongo(DATABASE)(COLLECTIONName) 

    } 

class testA { 

//getting collection object 
Factory.setCollectionName("collectionA") 
collectionMongo.find()//fetching the record of collectionA 

} 

class testB { 

//getting collection object 
Factory.setCollectionName("collectionB") 
collectionMongo.find()//fetching the record of collectionB 
} 

но этот код не работает, как требуется всегда получает значение CollectionName пустой строки «» , пожалуйста, руководство меня, где я делаю неправильно, пожалуйста помощь

+0

сделать collectionMongo «ленивый вал» будет работать. – waltersu

+0

будет ли это влиять на производительность? – swaheed

+0

Нет. Но я предлагаю вам полностью переписать свой код. – waltersu

ответ

1

Это типичный образец завода, вы можете изменить collectionMongo из Вала в функцию как этого

object Factory { 
    val SERVER = "<some server>" 
    val DATABASE = "<some database>" 
    val connectionMongo = MongoConnection(SERVER)(DATABASE) 
    def getCollection(name: String) = connectionMongo(name) 
} 

Использование

class testA { 
    val collectionA = Factory.getCollection(nameA) 
} 

class testB { 
    val collectionB = Factory.getCollection(nameB) 
} 
1

вы написали

val COLLECTIONName:String="" 

И тогда вы переназначение значение. Вы не можете переназначить значение в val, вместо него используйте var. Но это тоже плохой подход. Поэтому попробуйте изменить код, чтобы он был написан более функциональным способом.

Модифицированный код будет что-то вроде:

class Factory(connectionName:String) { 
    val connectionMongo = MongoConnection(SERVER) 
    val collectionMongo = connectionMongo(DATABASE)(connectionName) 
} 

class testA { 
    //getting collection object 
    val factory=new Factory("collectionA") 
    factory1.collectionMongo.find()//fetching the record of collectionA 
} 

class testB { 
    //getting collection object 
    val factory=new Factory("collectionB") 
    factory.collectionMongo.find()//fetching the record of collectionB 
} 

Я не уверен, что это лучший способ, но его полностью лучше.

Объект подход синглтон, как спросил:

object Factory { 
    var connectionName:String=_ 
    val connectionMongo = MongoConnection(SERVER) 
    def collectionMongo = connectionMongo(DATABASE)(connectionName) 

    } 

class testA { 

//getting collection object 
Factory.connectionName="collectionA" 
Factory.collectionMongo.find()//fetching the record of collectionA 

} 

class testB { 

//getting collection object 
Factory.connectionName="collectionB" 
Factory.collectionMongo.find()//fetching the record of collectionB 
} 

Я надеюсь, что помогает!

+0

извините за свою типографию, которую я отредактировал, ее фактически var ... не могли бы вы объяснить лучший подход с примером? – swaheed

+0

Я обновил ответ, посмотри! :) И upvote! : D –

+0

спасибо, но я хочу использовать объект scala, потому что мне нужен объект singleton, вот почему я не использую scala class – swaheed