假设可以这么写代码

假设书写一个网上售书系统,其中一个图书编辑页面,如果可以写成这样,你会怎么感觉?

 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代码相比,如果可以这样写代码,代码将会变得很短,维护将会变得很容易。

那么你是不是很想知道如何才能够做到这样写代码呢?

敬请关注《从码农到架构师》系列。

 

posted @ 2012-11-19 21:35  史蒂芬.王  阅读(407)  评论(0编辑  收藏  举报