设计问题讨论

假设系统需要分模块,其中有模块userInfoManager(负责customer的相关信息,prepaidCard ,customerCc,customerNotification等等)

方式一:(实现注册)
userInfoManager(里面包含customerService,prepaidCardService等类)
notificationManager
customerService
userInfoManager
register(){ // 实现注册操作
this.add(customer);
this.userInfoManager.getPrepaidCardService.add(customerId);
this.userInfoManager.getNotificationManager.sendEmail(message);

}

prepaidCardService

问题:在customer里面写register方法,并通过userInfoManager调用PrepaidCardService方法是否合理

方式二:(实现注册)

UserInfoManager
register(){
this.customerService.add(customer);
this.prepaidCardService.add(customerId)
this.getNotificationManager.sendEmail(message);
}

customerService
add();

prepaidCardService

问题:所有跨service的方法操作都写在userInfoManager里面是否合理
1)可能会有很多的方法在该类 (但是可以拆分成多个manager,这样将更繁杂)
2)方法的名字和调用时候的问题,比如我要去注册customer,是去用哪个类去完成,因为我可能不知道
这完成这个行为,它所进行的操作是否跨service
3) 像这种都需要发邮件的方法,放在哪?userInfoManager?


方式三:
综合方式一、二,划分系统如下
portal
userInfoManager

customerCardManager

cardInfoManager

这样如果需要实现注册操作则为portal.getUserInfoManager.register(customer)

类结构如下
userInfoManager
portal

register(){
this.add(customer);
portal.getCustomerCardManager.addPrepairdCard(customerId);
}

这样可以在把customerService和customerAddressService合在userInfoManager里面,减少service


这样的好处是有个系统结构
[该贴被hlayy于2012-04-12 18:50修改过]

用户注册是一个独立过程,是一种有态服务。

最好单独Service完成,完成后,通过一个中介者,通知其他模块,这样避免注册Service和其他模型耦合,所谓其他模块,比如发送Email,或者生成对应卡的用户ID等等,反正不是注册的都分离出去。