1

我正在做一个概念证明,以展示 Lift 相对于 MS MVC 的好处,因此我正在努力让 liftweb 与现有数据库集成。

我想重用我能做的,但用户对象需要修改,因为有行为变化,我需要添加和删除一些属性。

扩展 Mega 或 meta proto 用户或者只是复制类并以新名称修改它,然后在我的项目中使用它会更有意义吗?

如果我修改它,我可以添加一些新特征来改变行为,但我需要更改用于登录的内容,因为不使用电子邮件。

在java中我可以使用方面(AOP)来做到这一点,我认为scala中可能有类似的方式,但我不确定。

我正在与 MSSQL 集成,因此我希望最好使用映射器而不是记录来进行此集成。

4

1 回答 1

4

Scala 在 JVM 上运行,因此 AOP 技术仍然有效。但大多数人发现,Scala 的语言特性通常提供了一种比 AOP 更清洁、更简单的方式来实现他们的目标。

您可以通过简单地扩展MegaProtoUser/MetaMegaProtoUser覆盖您希望更改的方法来完成您想要的。例如,您可以覆盖def findUserByUserName(username: String)以通过用户名字段而不是电子邮件地址进行搜索。原型类是为这种定制而设计的。

如果您发现自己想要更改太多以至于想要复制/粘贴整个内容,那么我建议您只编写自己的用户类,或者使用更适合您需求的东西。proto 类没有什么神奇之处。他们只是在那里给你一个起点。另外,他们所做的某些事情在生产代码中会是错误的形式(即将 HTML 放入模型代码中)。

Tim Perret在Lift in Action中说得最好:

Proto-series 特征是一个起点,而不是一个结束解决方案。在许多方面,它们类似于 Rails 的脚手架:它们在短期内提高了生产力,但从长远来看,你会超越它们并逐渐将它们从应用程序中剔除,要么用你自己的代码替换,要么用你自己的代码替换来自某些插件或库的代码。

说到 Tim 和插件,他写了lift-shiro,它将 Lift 与Apache Shiro集成在一起。这也可能值得一试。

于 2012-04-25T13:45:20.417 回答