我正在設計一個數據驅動的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類,但我無法對此進行子類化,因爲我無法向下轉換由我的數據層返回的對象。
任何建議,我可以採取這一點,包括'查出來'將非常感激。謝謝你們!
你不想只通過WCF暴露你的數據層 - 你依賴於UI的行爲,這是不可靠/健壯的。最好的方法是讓BL坐在DAL的頂部,並通過WCF將BL方法展示給UI。這樣,你的BL就成爲你數據的守門人。你也不應該通過WCF傳遞BL中的實體,你應該使用DTO來抽象你的實體並且省略敏感字段(密碼哈希等)。這些永遠不會離開你的BL – Basic 2012-07-12 16:08:19