Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Scala编写数据库库-初始化代码_Scala_Library Design - Fatal编程技术网

用Scala编写数据库库-初始化代码

用Scala编写数据库库-初始化代码,scala,library-design,Scala,Library Design,我想用Scala语言为Neo4j数据库编写一个小型库。该库将与Neo4j数据库进行对话,主要是将类映射到节点。我想让它像spray jsonlibrary一样工作: 无论如何,我想知道一件事,在库中实现初始化代码的最佳方法是什么 例如,在Spring Data Neo4j中,当您使用Neo4jbean创建应用程序上下文时,行val ctx=new ClassPathXmlApplicationContext(…)调用一些代码,这些代码基于注释在Neo4j中创建索引 这样的步骤是否应该通过在构造函

我想用Scala语言为
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,它的目标是异步操作,尽管我不能说太多,因为我没有使用它的工作经验。