10.4 业务逻辑层实现
本系统的规模不大,只涉及5个DAO
组件,分别用于对5个持久化对象进行增、删、改、查操作。本系统使用一个业务逻辑对象即可封装5个DAO
组件。
10.4.1 设计业务逻辑组件
业务逻辑组件同样采用面向接口编程
的原则,让系统中的控制器不是依赖于业务逻辑组件的实现类,而是依赖于业务逻辑组件的接口类,从而降低了系统重构的代价。
该业务逻辑组件接口的类图如图10.9所示。
AuctionService
接口里定义了大量业务方法,这些业务方法的实现依赖于DAO
组件。为了达到高层次的解耦,这里推荐使用接口分离的规则,将业务逻辑组件分成接口和相应的实现类两个部分。
AuctionServiceImpl
实现类实现了AuctionService
接口,并实现了该接口中的所有方法。此外,AuctionServiceImpl
实现类中比接口中多了如下5个依赖注入的方法。
方法 |
描述 |
setUserDao(AuctionUserDao dao) |
为业务逻辑组件依赖注入AuctionUserDao 的方法。 |
setBidDao(BidDao dao) |
为业务逻辑组件依赖注入BidDao 的方法。 |
setItemDao(ItemDao dao) |
为业务逻辑组件依赖注入ItemDao 的方法。 |
setKindDao(KindDao dao) |
为业务逻辑组件依赖注入KindDao 的方法。 |
setStateDao(StateDao dao) |
为业务逻辑组件依赖注入StateDao 的方法。 |
该接口的作用同样是定义一种规范,规定该业务逻辑组件应该实现的方法。下面是该接口的代码: |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
| package org.crazyit.auction.service;
import java.util.List;
import org.crazyit.auction.business.BidBean; import org.crazyit.auction.business.ItemBean; import org.crazyit.auction.business.KindBean; import org.crazyit.auction.domain.Bid; import org.crazyit.auction.domain.Item; import org.crazyit.auction.domain.Kind; import org.crazyit.auction.exception.AuctionException;
public interface AuctionService {
List<ItemBean> getItemByWiner(Integer winerId) throws AuctionException;
List<ItemBean> getFailItems()throws AuctionException;
int validLogin(String username , String pass) throws AuctionException;
List<BidBean> getBidByUser(Integer userId) throws AuctionException;
List<ItemBean> getItemsByOwner(Integer userId) throws AuctionException;
List<KindBean> getAllKind() throws AuctionException;
int addItem(Item item, int avail , int kindId , Integer userId) throws AuctionException;
int addKind(Kind kind) throws AuctionException;
List<ItemBean> getItemsByKind(int kindId) throws AuctionException;
String getKind(int kindId) throws AuctionException;
ItemBean getItem(int itemId) throws AuctionException;
int addBid(int itemId , Bid bid ,Integer userId) throws AuctionException;
void updateWiner()throws AuctionException; }
|
在该接口里定义了大量的业务逻辑方法,实际上,这些业务逻辑方法通常对应一次客户请求。这些业务逻辑方法当然不会被直接暴露出来,这些业务逻辑方法只是供前端MVC
控制器调用,而MVC
控制器并不直接与业务逻辑组件的实现类耦合,而仅仅只是依赖于系统的业务逻辑组件接口。当需要重构系统业务逻辑组件时,只要该组件的接口不变,则系统的功能不变,系统的控制器层也无须改变,从而把系统的业务逻辑层的改变阻止在该层以内,避免了向上扩散。