一条物理链路划分信道(2)
2008-04-29 20:38
288 查看
play 框架引入了一个简单的数据库访问层:anorm。
使用anorm做模型层,代码大致如下:
明显比JPA繁杂,那么,有没有办法封装下anorm,使它更象orm,提供更好的维护性,更快的开发速度?
在scala 2.10中,引入的试验性功能:macro, reflection,或许就是问题的答案(现在只是一个构想,会抽空实现验证下),还是代码为先:
通过Modal及提供的macro,简化了model的定义。
ModalMacroImpl可以通过reflaction实现,并且macro是编译时增强的,不会对性能造成影响。
使用anorm做模型层,代码大致如下:
case class Dog(id: Pk[Long], name: String, age: String) object Dog { val simple = get[Pk[Long]]("dog.id") ~ str("name") ~ int("age") map { case id ~ name ~ age => Dog(id, name, age) } def findById(id: Long) = DB.withConnection { implicit connection => SQL("select * from dog where id = {id}").on('id -> id).as(Dog.simple.singleOpt) } def create(dog: Dog) = DB.withConnection { implicit connection => val idOpt: Option[Long] = SQL( """ insert into dog (name, age) values ({name}, {age}) """ ).on( 'name -> dog.name, 'age -> dog.age ).executeInsert() val result = dog.copy(id = Id(idOpt.get)) result } def update(id: Long, dog: Dog) = DB.withConnection { implicit connection => SQL( """ update dog set name = {name}, age = {age} where id = {id} """ ).on( 'id -> id, 'name -> dog.name, 'age -> dog.age ).executeUpdate() } }
明显比JPA繁杂,那么,有没有办法封装下anorm,使它更象orm,提供更好的维护性,更快的开发速度?
在scala 2.10中,引入的试验性功能:macro, reflection,或许就是问题的答案(现在只是一个构想,会抽空实现验证下),还是代码为先:
trait Modal[T] { val simple = macro ModalMacroImpl.simple[T] def findById(id: Long): Option[T] = macro ModalMacroImpl.find def create(o: T) = macro ModalMacroImpl.create def update(id: Long, o: T) = macro ModalMacroImpl.update def list = macro ModalMacroImpl.list } object Dog extends Modal[Dog] { def findByName(name: String): Option[T] = macro ModalMacroImpl.find }
通过Modal及提供的macro,简化了model的定义。
ModalMacroImpl可以通过reflaction实现,并且macro是编译时增强的,不会对性能造成影响。
相关文章推荐
- 一条物理线路上划分信道(1)
- 一条物理线路上划分信道(3)
- ▶链路层第三弹◀ 两种信道下的数据链路层【下】广播通信CSMA/CD
- LTE物理层之信道编码--数据信息编码:turbo编码
- 802.11bgn信道划分及WirelessMon规划频段
- 面试题-----物理层-链路层-网络层的作用
- 在两台Linux机器之间配置一条SLIP链路,以便使用互联网socket进行通信
- 物理信道重配置-异频切换
- CAN的数据链路层和物理层注意事项
- 网络知识总结二:物理层和链路层协议详解
- GSM的网络结构、区域划分、识别号码、信道分类
- Linux ALSA 音频系统:物理链路篇
- 配置基于接口划分VLAN(静态配置链路类型)
- Bluetooth MESH探究 --- (4) BLE core spec之链路层信道与状态
- 物理信道重配置/无线承载重配置
- LTE上行物理层传输机制(3)-上行物理信道和参考信号的位置
- 蓝牙基础知识进阶——物理链路和逻辑传输
- LTE学习笔记3之物理层信道与信号
- 信道容量和吞吐量、链路和信道辨析