1
我正在使用Scala,Anorm和Play2框架從SQL表中檢索數據。在很多地方我有這樣的代碼:Anorm Parsers更好的代碼佈局
val emailViewRecordParser: RowParser[EmailViewRecord] = {
str("sfname") ~
str("slname") ~
str("practice_name") ~
str("email") ~
str("phone_area_code") map {
case
subscriberFirstName ~
subscriberLastName ~
practiceName ~
subscriberEmail ~
phoneAreaCode
deviceAddress =>
EmailViewRecord(
subscriberFirstName,
subscriberLastName,
practiceName,
subscriberEmail,
phoneAreaCode
)
}
}
這很難管理,因爲它很容易弄亂參數排序/長度。理想情況下,我們將能夠寫的線沿線的東西:
val emailViewRecordParser: RowParser[EmailViewRecord] = {
EmailViewRecord(
str("sfname") map { subscriberFirstName } subscriberFirstName,
str("slname") map { subscriberLastName } subscriberLastName,
str("practice_name") map { practiceName } practiceName,
str("email") map { subscriberEmail } subscriberEmail,
str("phone_area_code") map { phoneAreaCode } phoneAreaCode
)
}
什麼是達到沿着這些線路佈局一個很好的功能呢?另外,開始處的'str'函數可能是int,date等,所以第一個函數需要針對每一行都具體。
我們有許多具有15列以上的表格,所以我仍然會得到如下長線: 情況a〜b〜c〜d〜e〜f〜g〜h〜i〜j〜k〜l〜m 〜n => EmailViewRecord(a,b,c,d,e,f,g,h,i,j,k,l,m,n) 這很難理解,因爲您必須嘗試遵循 將1個垂直列表轉換爲附加到彼此的 的2個水平列表。一種使用3列的方法 - col_a - > a - > a \ n col_b - > b - > b \ n 等似乎更易於維護,因爲您可以輕鬆跟蹤每個變量的轉換。 – 2014-10-09 13:18:39
@swoogles - 要點是,你不會犯錯誤。文檔和轉換後的所有內容都發生在垂直列表中。剩下的只需要有相同數量的元素。 – 2014-10-09 20:28:21
@sowogles如果你有許多包含15列以上的表格,可能需要對數據進行規範化或分區。然後你可以將多個解析器組合成一個。 – 2014-10-11 19:23:45