2012-04-25 35 views
1

我正在工作的概念证明,以显示工作的好处,举起MS MVC,所以我正在liftweb集成与现有的数据库。是否复制或扩展megaprotouser或metaprotouser集成liftweb与现有的数据库

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

扩展Mega或meta proto用户还是仅仅复制类并用新名称修改它并在我的项目中使用它会更有意义?

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

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

我与MSSQL集成,所以我期望最好使用映射器而不是记录来进行这种集成。

回答

4

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

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

如果您发现自己想要改变太多以至于想要复制/粘贴整个事物,那么我建议您只需编写自己的用户类或使用更适合您需求的东西。原始类没有什么神奇的;他们只是为了给你一个出发点。另外,他们做的事情在生产代码中是不好的形式(即将HTML放入模型代码中)。

Tim PerretLift in Action说得好:

的原系列的特征是一个起点,而不是结束的解决方案。 在许多方面,它们与Rails的脚手架类似:它们在短期内提高生产力,但从长远来看,它们将超过 ,并逐渐将它们排除在应用程序之外,或者由 替换为您自己的应用程序代码或可能来自某个插件 或库的代码。

说到蒂姆和插件,他写了lift-shiro,它集成了Lift和Apache Shiro。这也许值得一试。

+0

由于这只是一个概念验证,任何我可以重复使用的东西都会很棒,但我可能会尝试重写并看看我可以根据需要使用它,因为我必须使其符合要求到已经存在的数据模式,并且可能会在映射中对原始sql做很多处理。 – 2012-04-25 14:26:46

+0

我错过了已经有一个模式来代表用户的一点。您可能会遇到更大的问题,除非您碰巧以“MappedPassword”预期存储密码的方式存储密码。那么,也许复制'mapper.ProtoUser'并将它弯曲到你的意愿是最好的。 – leedm777 2012-04-25 16:55:52

+0

这就是我的想法,因为密码将是一个问题。我强烈地倾向于复制和弯曲方法。 – 2012-04-25 18:47:02

相关问题