如何在Lift项目中组织Scala代码?

7
经过一年半的Ruby和Rails编程后,我终于开始使用Scala和Lift进行新项目开发。基本上我正在尝试编写一个用于访问大型数据库(数百万行)信息的API。Lift应该帮助我编写这个项目的前端部分(即API部分)。但现在,这还涉及到一个模块,该模块将从压缩ZIP XML文件中读取数据以最初填充数据库中的行。该模块需要每三个月运行一次。
我应该把这个模块代码放在哪里?或者说,我应该如何组织我的Lift和Scala代码?后台进程应该放在哪里?欢迎提供任何相关方面的指导建议。

“海量数据库(数百万行)”?我时常看到类似的说法,想要严谨地指出,仅有“数百万行”并不构成一个庞大的数据库(除非每个行/对象都大于GB)。我正在处理BI数据库,其中单个表格拥有数亿行数据集,大小约为50GB。即使如此,这仍然不是一个“巨大”的数据库。仅元数据就有数百万“行”。 - nicerobot
2
我认为OP正在使用英制单位“Huge”,而你在提到公制单位“Huge”。 - Jon McAuliffe
3个回答

5

我不太确定您想要什么,但我正在使用SBT (http://code.google.com/p/simple-build-tool/)。它绘制了一个默认的项目结构。您应该特别关注子项目 (http://code.google.com/p/simple-build-tool/wiki/SubProjects)。

对于定期进程,您可以使用actor和ActorPing在规律的时间间隔内重新启动进程。对于像3个月这样的长时间间隔,您可以通过触摸文件并在应用程序重新启动时检查日期来跟踪上次调用。ActorPing需要在应用程序启动时启动;这可以在lift boot中完成。如果您需要更多地进行模块化,可以创建一个servlet,在servlet init中启动ActorPing。


嗯,我知道SBT,但子项目是值得一看的好东西。此外,关于后台项目的解释真的很有帮助。谢谢。 - Kamesh Rao Yeduvakula

2

Lift遵循(至少我使用的版本)标准的Maven 2结构,因此在这方面没有什么特别之处。只需将代码添加到src文件夹中即可。要创建的包取决于您的设计/偏好,我们无法真正帮助您 :)


这真的很有帮助。所以基本上在Lift中似乎没有任何传统的做事方式。我不知道这是好是坏。 - Kamesh Rao Yeduvakula

1

使用SBT作为构建工具的“标准”Lift项目通常需要以下项目结构:

project
src
  main
    scala
      bootstrap
        liftweb
          Boot.scala
      project-name
        comet
        lib
        model
        snippet
        view
    resources
    webapp
      WEB-INF/web.xml
      index.html
  test
    resources
    scala
      RunWebApp.scala

如果您正在使用 Lift Mapper ORM,则通常将模型放在 src/main/scala/project-name/model 目录中。 同样,任何 CometActor 都应该放在 src/main/scala/project-name/comet 中。 您编写的任何自定义片段都应该在 src/main/scala/project-name/snippet 中,而自定义视图组件则在 project-name 下的 view 目录中。 所有与启动应用程序和建立数据库连接器等相关的代码都应该放在 src/main/scala/bootstrap/liftweb/Boot.scala 中。 其余结构遵循前面所述的一般 Maven 2 结构。
这只是默认 Lift 应用程序提供的一般结构。 唯一需要的是 bootstrap.liftweb.Boot.scala 文件,因为 Lift Servlet 在引导期间查找该类。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接