2012-07-12 46 views
0

我正在設計一個數據驅動的Windows應用程序,它不是由底層SQL Server提供,而是由WCF服務提供,以允許本地和遠程訪問。構建WCF數據層和WPF前端之間的業務層

說WCF提供特定的功能對於用戶來說,庫存,客戶等的檢索,而實際執行ADO操作,大意如下:

[OperationContract] 
UserAdapter GetUserByWindowsIdentity(string Domain, string Account); 

它返回一個:

[DataContract] 
public class UserAdapter 
{ 
    [DataMember] 
    public int? ID; 

    [DataMember] 
    public string Domain; 

    [DataMember] 
    public string Account; 

    [DataMember] 
    public string Name; 
} 

我不想在我的WPF前端應用程序中具體引用我的WCF客戶端,我想在另一層之間抽象一些其他功能 - 例如,通過其WindowsIdentity驗證用戶登錄既不屬於數據層,也不屬於r表示層,而是中間業務邏輯層。

我不確定如何去做這件事。我會在我的表現層更喜歡能夠做到的線沿線的東西:

User.Login(); 

,併爲用戶對象,以抽象的像域,帳戶等相同的屬性,按我的UserAdapter類,但我無法對此進行子類化,因爲我無法向下轉換由我的數據層返回的對象。

任何建議,我可以採取這一點,包括'查出來'將非常感激。謝謝你們!

+0

你不想只通過WCF暴露你的數據層 - 你依賴於UI的行爲,這是不可靠/健壯的。最好的方法是讓BL坐在DAL的頂部,並通過WCF將BL方法展示給UI。這樣,你的BL就成爲你數據的守門人。你也不應該通過WCF傳遞BL中的實體,你應該使用DTO來抽象你的實體並且省略敏感字段(密碼哈希等)。這些永遠不會離開你的BL – Basic 2012-07-12 16:08:19

回答

1

如果您有一些業務邏輯,那麼中間的一個附加層就非常有意義,當然實施細節取決於您的要求。

如果你仔細想一想,基礎數據類不應該知道如何登錄,因爲這已經是業務邏輯:這實際上是你考慮的方法背後的真正問題。

將業務邏輯隱藏在另一組服務中也是您應該考慮的選項,它可以在業務邏輯層面獲得WCF的所有優勢(以及擁有成本)。

Dino Esposito寫了一本關於architecting enterprise applications的好書,也許你可以在那裏找到一些靈感來實現你的分層架構。