假设可以这么写代码

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

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

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

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

 

你可能感兴趣的:(代码)