2012-04-25 36 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

相關問題