假设可以这么写代码
假设书写一个网上售书系统,其中一个图书编辑页面,如果可以写成这样,你会怎么感觉?
1 <HMTL> 2 <head> 3 #{title 'BookEdit.Edit'/} 4 </head> 5 <body> 6 #{form action='BookEdit.save()'} 7 #{EditBar title='book.edit.isbn', text=${Book.isbn} /} 8 #{EditBar title='book.edit.name', text=${Book.name} /} 9 #{EditBar title='book.edit.author', text=${Book.author} /} 10 #{EditBar title='book.edit.press', text=${Book.press} /} 11 #{EditBar title='book.edit.price', text=${Book.price} /} 12 #{/form} 13 </body> 14 </HTML>
其中的#{.../}式标签为自定义标签,可以代表很多封装好的内容。相对来说,这样的代码比Jsp代码更为简练,格式对齐更佳。无需设置更多的Javascript。
代码达到更高的复用率。
对应的Book类是这样定义的
1 public class Book extends Entity { 2 @Mandatory 3 @MinLength(10) 4 @MaxLength(20) 5 public String isbn; 6 7 @Mandatory 8 @MinLength(1) 9 @MaxLength(200) 10 public String name; 11 12 @Mandatory 13 @MinLength(2) 14 @MaxLength(100) 15 public String author; 16 17 @Mandatory 18 @MinLength(1) 19 @MaxLength(100) 20 public String press; 21 22 @Mandatory 23 @Min(0) 24 public float price; 25 }
其中的Mandatory表示该字段是必须输入的。如果没有输入,则自动的在html代码中对应的EditBar中显示错误提示消息。
而MinLength,MaxLength,Min则分别代表长度和大小的限制。
对应的BookEdit类则定义为下面的样子
1 public BookEdit extends Controller { 2 public void save() { 3 Book book = getForm().toEntity(); 4 validate(book); 5 if (hasErrors()) { 6 edit(book); 7 } 8 book.save(); 9 render(); 10 } 11 }
其中的Validate是一个标准校验方法,用来校验指定Entity的子类,根据该类的定义Annotation对比实际上得到的值。如果有发现错误,则返回到当前页面,如果没有错误则保存数据,并刷新显示。
和传统的Struts代码相比,如果可以这样写代码,代码将会变得很短,维护将会变得很容易。
那么你是不是很想知道如何才能够做到这样写代码呢?
敬请关注《从码农到架构师》系列。
-----------------------------------------------------------------
现为独立咨询师。为软件企业或者其他企业的软件采购部门提供咨询,帮助改进软件开发流程,员工技术能力提升,以帮助企业在质量成本交货期三方面得到改善。