是否可以給出不同類別的視圖。例如,我有帳戶類,我想公開這個數據使用WCF。對於不同的方法調用,我希望公開不同的帳戶類的屬性。假設特定的調用我想只公開用戶名和密碼,爲 另一個電話我想公開電子郵件和地址。如果我必須寫不同的類或 我可以在需要的財產暴露在客戶端公開類別的不同視圖
回答
你可以做到這一點使用接口「意見」。例如,使用方法或屬性創建一個UsernamePassword接口來訪問用戶名和密碼,並讓Account類實現這個接口。然後你可以傳遞這個接口,並且它的用戶不會意識到帳戶類中的其他方法和屬性。
interface IUsernamePassword
{
string Username { get; set; }
string Password { get; set; }
}
class Account : IUsernamePassword
{
public string Username { get; set; }
public string Password { get; set; }
}
注意這裏也有WCF,它可以影響事物;此外,調用者可能拋棄界面也可能無關緊要。 – 2010-12-21 08:18:56
您可以使用具有DataMember屬性的DataContract,但它允許您只生成一個類的序列化視圖。您可能需要創建較小的ViewModel類,可能使用AutoMapper爲您處理所有映射代碼。
如果一個用法是WCF和另一使用內置於您的應用程序,那麼你就可以適當地[DataMember]
使得只有期望的特性暴露註釋類。如果您有兩個不同的WCF場景,那麼我會引入一個新的類(或多個類)來表示每組返回數據,可能會添加一個隱含的conversion operator(從實體到DTO),以便您可以執行:
public CustomerLite GetCustomer(int id) {
Customer cust = SomeTier.GetCustomer(id);
return cust; // note cust is Customer but we are returning CustomerLite
}
如果要公開同Account
類的多個視圖,答案是否定的(即我所知道的)。使用默認的DataContractSerializer
,您可以控制哪些成員僅以聲明方式呈現給用戶。這將允許您以一種方式自定義用戶的視圖,但不能以倍數。
相反,您可以創建一個單獨的數據合同類(可能需要Account
作爲構造函數參數),以便爲每個您希望公開的「視圖」創建。
永遠,永遠,使用被你的應用程序域之外的任何託管服務時,總是使用消息類(又名DTO)。
我用在我的WCF所有演示,說明郵件類別!=業務類幻燈片,但我既然找到了一個更好的方式來解釋它。
這不是星際旅行的人。 You Can't Fax a Cat(一張圖片勝過1000字)。
- 1. 多個端點公開相同資源的不同視圖
- 2. 如何在視圖中公開不同的過濾器
- 3. 兩個WCF服務公開同一個實體的兩個不同類別
- 4. 子類的不同視圖
- 5. 從不同的視圖控制器打開相同的視圖
- 6. Drupal視圖:公開輸出樣式的個別字段
- 7. 從不同的視圖/類別的uisearchbar中搜索
- 8. 針對不同公司視圖的不同顏色
- 9. iOS更改不同大小類別的視圖屬性
- 10. 可以在SharePoint中創建針對不同用戶類別的不同視圖?
- 11. 如何從不同類別的不同視圖控制器調用函數
- 12. 不同類別
- 13. 不同類別
- 14. iPad。 UIBarButtonItem有一個UIToolbarTextButton類型的未公開的視圖。咦?
- 15. 縮略圖類別的不同樣式
- 16. CakePHP調用不同類的視圖來渲染主類視圖
- 17. 不同級別的WPF樹視圖的樣式不同嗎?
- 18. html類別/子類別最佳視圖
- 19. 顯示不同級別的不同QML C++ DOM模型視圖
- 20. 從不同包中的類調用公共類的公共類
- 21. 不能檢索類別列表視圖
- 22. Rails:DRYing類似但不同的視圖
- 23. Soup.Find不同類別
- 24. AngularJS指令,公開視圖狀態
- 25. 調用公共類中的公共類,從不同的包
- 26. Proplem視圖類別3
- 27. 通過WCF公開DTO時不同類型的ID
- 28. 如何在WCF中將類型公開爲不同的名稱?
- 29. 公開單個類中的不同接口
- 30. SQL - 不同類別的列
爲什麼要調用某些方法時隱藏某些屬性?它是將它從程序員還是用戶中隱藏起來? – Heki 2010-12-21 08:16:06
@Heki - 從提及[wcf]和[web-services],我們應該推斷a **客戶端**所需的數據不一定與系統內部需要的數據相同。 – 2010-12-21 08:24:10
你可能是對的,但我覺得有必要提出一個澄清的問題。無論如何,我一定會像你所建議的那樣與DTO合作。 – Heki 2010-12-21 09:04:28