sdf

以 Purchase Order 模块为例: 
    当Purchase Order 的状态改变时,会引起几个domain 类的变化,那么还要
使用观察者模式。 
但是如果变化是已知的,或者说  PO的 status 的变化只集中在 purchase 模块中的
话, 
那可以不使用观察者模块。 
关于如何使用观察者模式,请参考7.9 节 
 
代码如下: 
1、新建若干个状态变换接口,代码例子如下 
public interface ClosedAction 
{ 
	boolean isCloseable(PurchaseOrder obj); 
	void execute(PurchaseOrder obj); 
}  
 2、在Service 实现类中加如下代码 

@Setter 
private OrderStatusTransferAction statusTransferaAction; 

public void changeStatus(int id, StatusType status) 
{ 
	PurchaseOrder order = this.get(id); 
	if(order == null) { 
		throw new PurchaseException(PurchaseEnum.PONotFound); 
	} 
	statusTransferaAction.transfer(status, order); 
} 
 
3、 将OrderStatusTransferAction 单独出来的原因是:为了方便扩充观察者模式  和 
降低service 层的复杂度。对应的代码如下: 

public class OrderStatusTransferAction{ 
	@Setter 
	private ClosedAction closeAction; 
	public void transfer(StatusType formStatus, PurchaseOrder obj) { 
		if(formStatus == StatusType.Closed) { 
			if(closeAction.isCloseable(obj)) { 
				closeAction.execute(obj); 
			} 
		} 
	} 
} 
 
4、在Purchase Order的bean 中添加配置:closeActionImpl 是 CloseAction 接口的
实现类 
<bean name="purchaseOrderService" class="com.optiongroupinc.erp.purchase.service.impl.PurchaseOrderServiceImpl"> 
	<constructor-arg ref="purchaseOrderDao"></constructor-arg> 
	<property name="statusTransferaAction" ref="statusTransferaAction"></property> 
</bean> 
<bean name="statusTransferaAction" class="com.optiongroupinc.erp.purchase.order.service.OrderStatusTransferAction"> 
	<property name="closeAction" ref="closeActionImpl"/> 
</bean> 
 

 
代码如下: 
1、新建一个接口 
public interface PurchaseOrderDeleteAction 
{ 
	boolean isDeletable(PurchaseOrder purchaseOrder); 
	void deleteAction(PurchaseOrder po);  
}
 
2、在Service 实现类中加如下代码 
@Setter 
private List<PurchaseOrderDeleteAction> actions; 
@Override 
public void delete(Integer id) 
{ 
	if (actions != null) 
	{ 
		for (PurchaseOrderDeleteAction action : actions) 
		{ 
			if (!action.isDeletable(get(id))) 
			{ 
			throw new PurchaseException(PurchaseEnum.POCanNotDeleted); 
			} 
		} 

		for (PurchaseOrderDeleteAction action : actions) 
		{ 
			action.deleteAction(get(id)); 
		} 
	} 
	super.delete(id); 
} 
 
3、在Purchase Order的bean 中添加配置 
<bean name="purchaseOrderService" class="com.optiongroupinc.erp.purchase.service.impl.PurchaseOrderServiceImpl"> 
	<constructor-arg ref="purchaseOrderDao"></constructor-arg> 
	<property name="actions"> 
	<list> 
		<ref bean="..." /><!-- 对应的删除验证 bean --> 
		<ref bean="..." /><!-- 对应的删除验证 bean --> 
	</list> 
	</property> 
</bean>
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值