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