设计问题讨论

12-04-12 hlayy
假设系统需要分模块,其中有模块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修改过]

         

banq
2012-04-13 10:46
用户注册是一个独立过程,是一种有态服务。

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

猜你喜欢