我一直在试图找到一种通过“视图”暴露对象的灵活方式。举例来说,我可能更好解释。通过“视图”界面暴露对象
我有一个实体框架实体模型和一个可用于查询它的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