我一直在試圖找到一種通過「視圖」暴露對象的靈活方式。舉例來說,我可能更好解釋。通過「視圖」界面暴露對象
我有一個實體框架實體模型和一個可用於查詢它的Web服務。我能夠自己返回實體類,但是這可能包含一些我可能不想共享的字段 - 例如ID,或者*實體模型中任何關聯的引用屬性。
我想我需要的是數據視圖,但我不特別想爲每個返回類型編寫一個視圖包裝類。我希望我能夠定義一個接口,並以某種方式利用它。例如:
interface IPersonView
{
string FirstName { get; }
string LastName { get; }
}
-
// (Web service method)
IPersonView GetPerson(int id)
{
var personEntity = [...];
return GetView<IPersonView>(personEntity);
}
然而,爲了做這樣的事情,我必須有我的實體實現視圖接口。我希望有更靈活的「鴨式」方法,因爲可能會有很多對象的觀點,我並不是真的想要全部實現它們。
我已經通過反射接口並複製字段和屬性來構建動態類型,但我無法將其轉換回接口類型,以便在Web服務上獲得強大的輸入。
只是尋找一些意見和建議,都會受到歡迎。謝謝。
爲什麼不使用[數據合同](http://msdn.microsoft.com/zh-cn/library/ms733127.aspx)? –
@Barguast:鑄造應該非常簡單,因爲您的類型是泛型類型參數。也許你可以擴展你的問題到底是什麼 –
你將不得不定義哪些屬性要包含哪些屬性,哪些屬性可以省略,也許有些類型轉換。這可以通過很多方式完成,但明確的POCO/DTO或標記具有屬性的實體似乎是最直接的選擇。這不可能通過魔法發生。 – Jodrell