今天關於這個問題我和同事進行非常激烈的討論,最後還有有點不了了之的感覺。
在回家的路上我想到了如何來決定這個問題。
在論述這一問題之前先描述一下上下文。
首先我公司普通的項目使用以下的架構。
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層進行調用。