用Scala编写数据库库-初始化代码
我想用Scala语言为用Scala编写数据库库-初始化代码,scala,library-design,Scala,Library Design,我想用Scala语言为Neo4j数据库编写一个小型库。该库将与Neo4j数据库进行对话,主要是将类映射到节点。我想让它像spray jsonlibrary一样工作: 无论如何,我想知道一件事,在库中实现初始化代码的最佳方法是什么 例如,在Spring Data Neo4j中,当您使用Neo4jbean创建应用程序上下文时,行val ctx=new ClassPathXmlApplicationContext(…)调用一些代码,这些代码基于注释在Neo4j中创建索引 这样的步骤是否应该通过在构造函
Neo4j
数据库编写一个小型库。该库将与Neo4j
数据库进行对话,主要是将类映射到节点。我想让它像spray json
library一样工作:
无论如何,我想知道一件事,在库中实现初始化代码的最佳方法是什么
例如,在Spring Data Neo4j
中,当您使用Neo4j
bean创建应用程序上下文时,行val ctx=new ClassPathXmlApplicationContext(…)
调用一些代码,这些代码基于注释在Neo4j
中创建索引
这样的步骤是否应该通过在构造函数/工厂方法中使用静态方法来实现(在Scala
中,它可能是一些伴生对象)?如果是这样的话,如果我不想显式调用初始化代码,那我该怎么做呢?这意味着我第一次使用我的库初始化中的东西时发生了,但它被缓存在某个地方——在这种情况下,我正在考虑使用惰性VAL来存储我的库所需的信息
这样的步骤应该通过在中使用静态方法来实现吗
构造函数/工厂方法(在Scala中可能是一些
伴星
不,初始化一词意味着状态,全局状态是反模式的。我真的很喜欢它的设计:
import com.mongodb.casbah.Imports._
val mongoClient = MongoClient("localhost", 27017)
val database = mongoClient("test")
// now the actual work with databases and encompassed collections
db.collectionNames
val coll = db("test")
...
现在,我可以拥有多个客户端实例,这不仅对主应用程序代码非常有用,而且对测试非常有用。此外,如上所述,将所有内容都放在对象中可能会使多线程应用程序的情况变得复杂
如果是这样,如果我不想显式调用
初始化代码,这意味着我第一次使用
库初始化发生了,但它被缓存在某个地方-我是
考虑使用惰性VAL存储我的系统所需的信息
在这种情况下,图书馆
为什么不像上面代码中的那样展开会话(即MongoClient
)对象并缓存其中的所有内容
仅供参考,它与您的查询没有直接关系,但当您实现scala api时,它是一个很好的选择谢谢您的回答,您可能对每会话缓存和避免全局状态是正确的,我将查看
Casbah
源代码以获得一些启示。注意,Casbah被认为是scala的v1 mongo api,还有新的wave,它的目标是异步操作,尽管我不能说太多,因为我没有使用它的工作经验。