技术开发 频道

EJB 非常好的实践: 验证助手类

        使用 Validator

  针对我们需要验证的特定数据类型,在将 Validator 置于适当位置并对它作设置之后,在应用程序中使用它就很容易,在我们的业务委派方法中尤其如此。清单 3 中重写了上一篇技巧文章中的委派,以使它能使用新的 Validator 类。

  清单 3. 业务委派中的数据格式验证

1 package com.ibm.library;
2 import java.rmi.RemoteException;
3 import java.util.Iterator;
4 import java.util.List;
5 import javax.ejb.CreateException;
6 import javax.naming.NamingException;
7 import com.ibm.validation.Validator;
8 import com.ibm.validation.InvalidDataException;
9 public class LibraryDelegate implements ILibrary {
10     private ILibrary library;
11     public LibraryDelegate() {
12         init();
13     }
14     
15     public void init() {
16         // Look up and obtain our session bean
17         try {
18             LibraryHome libraryHome =
19                 (LibraryHome)EJBHomeFactory.getInstance().lookup(
20                     "java:comp/env/ejb/LibraryHome", LibraryHome.class);
21             library = libraryHome.create();
22         } catch (NamingException e) {
23             throw new RuntimeException(e);
24         } catch (CreateException e) {
25             throw new RuntimeException(e);
26         } catch (RemoteException e) {
27             throw new RuntimeException(e);
28         }
29     }
30     
31     // No validation required for accessor (getter) methods
32         
33     public boolean checkout(Book book) throws ApplicationException {
34         // No validation required here; the object type
35         //   takes care of it
36     
37         try {
38             return library.checkout(book);
39         } catch (RemoteException e) {
40             throw new ApplicationException(e);
41         }
42     }
43     
44     public boolean checkout(List books) throws ApplicationException {
45         // Validate list
46         Validator.validateList(books, Book.class);
47     
48         try {
49             return library.checkout(books);
50         } catch (RemoteException e) {
51             throw new ApplicationException(e);
52         }
53     }
54     
55     public Book lookup(String isbn) throws ApplicationException {
56         // Validate ISBN
57         Validator.validateISBN(isbn);
58         
59         try {
60             return library.lookup(isbn);
61         } catch (RemoteException e) {
62             throw new ApplicationException(e);
63         }
64     }
65         
66     // And so on...    
67     
68     public void destroy() {
69         // In this case, do nothing
70     }
71 }
72

  使用独立的 Validator 使代码更模块化和更易维护。另外,我们已将所有的验证逻辑移至一处,从而避免代码中出现冗余。其结果是一个更佳、更不易出错的应用程序。

0