我正在制作一个概念验证,以展示电梯对MS MVC的好处,因此我正在研究liftweb与现有数据库的集成。
我想重用我能做的,但是需要修改用户对象,因为行为有变化,我需要添加和删除一些属性。
扩展Mega或meta proto用户或者只是复制该类并使用新名称对其进行修改会更有意义,并在我的项目中使用它吗?
如果我修改了它,我可以添加一些新特性来改变行为,但我需要更改用于登录的内容,因为电子邮件未被使用。
在java中,我可以使用一个方面(AOP)来做这个,我认为scala中可能有类似的方式,但我不确定。
我正在与MSSQL集成,所以我希望最好使用mapper而不是record来进行集成。
答案 0 :(得分:4)
Scala在JVM上运行,因此AOP技术仍然有效。但大多数人发现,Scala的语言功能通常比AOP提供更简洁,更简单的方法来实现目标。
您可以通过简单地扩展MegaProtoUser
/ MetaMegaProtoUser
并覆盖您希望更改的方法来完成您想要的任务。例如,您可以覆盖def findUserByUserName(username: String)
以按用户名字段而不是电子邮件地址进行搜索。 proto类是为这种自定义而设计的。
如果您发现自己想要更改以至于想要复制/粘贴整个内容,那么我建议您只编写自己的用户类,或者使用更符合您需求的内容。原型课没有什么神奇之处;他们只是给你一个起点。另外,他们所做的事情在生产代码中也是不好的形式(即将HTML放在模型代码中)。
Tim Perret在Lift in Action中说得最好:
Proto系列特征是一个起点,而非终结解决方案。 在许多方面,它们与Rails的脚手架类似:它们会提升 短期内的生产力,但从长远来看,你会长大 它们会逐渐将它们从你的应用程序中分解出来 替换为您自己的代码或者使用某些插件中的代码替换 或图书馆。
谈到Tim和插件,他写了lift-shiro,它将Lift与Apache Shiro集成在一起。这也许值得一试。