今天关于这个问题我和同事进行非常激烈的讨论,最后还有有点不了了之的感觉。
在回家的路上我想到了如何来决定这个问题。
在论述这一问题之前先描述一下上下文。
首先我公司普通的项目使用以下的架构。
WebSite=>WCF=>BLL=>Repository=>DAL=>DB
同层之间可以直接调用但不能调用其他同层的下一层。
各层之间的职责如下:
WebSite:页面展现层。提供页面管理以及绘制。
WCF:服务提供层。提供服务管理以及初始化。
BLL: 业务逻辑层,用于提供业务逻辑的实现。
Repository:业务对象仓储层,用于提供业务对象的存取。
DAL:数据访问层,用于提供数据对象的永久化以及读取。
DB:数据库,用于存放数据对象的永久化数据。
在我和同事的讨论中主要是集中在外部服务调用代理也就是WSProxy到底是应该视作BLL层以提供其他BLL层调用还是视作Repository层让其他Repository层进行调用。
BLL层主要有以下业务。
1、不会返回业务数据的业务。如:发送一封邮件,发送一条短信。
2、返回业务数据的业务。如:得到订单列表、已发送邮件列表等。
Repository主要是以下业务。
1、为BLL层提供业务数据。
2、将业务数据转为固化数据提供给DAL层 进行固化。
明确了每一层的业务,那要对WSProxy进行分层也只需要明确WSProxy层的业务就可以得到。
我们调用WSProxy层主要有以下业务。
1、得到业务数据。如:得到主站点已注册的用户信息。
2、使用一个业务。如:通过主站点的发送短信,邮件等。
由此 可以看到,WSProxy所提供的业务BLL层提供的业务是一致的,所以应该视作BLL层并让其他BLL层进行调用。