我一直在尝试找到一种通过“视图”来展示对象的灵活方式。我可能最好通过示例来解释。
我有一个 Entity Framework 实体模型和一个可用于查询它的 Web 服务。我可以自己返回实体类,但这将包括一些我可能不想共享的字段 - 例如 ID,或来自实体模型中任何关联的 *Reference 属性。
我认为我需要的是数据视图,但我并不特别想为每个返回类型编写一个视图包装类。我希望我能够定义一个接口并以某种方式利用它。例如:
interface IPersonView
{
string FirstName { get; }
string LastName { get; }
}
-
// (Web service method)
IPersonView GetPerson(int id)
{
var personEntity = [...];
return GetView<IPersonView>(personEntity);
}
但是,为了做这样的事情,我必须让我的实体实现视图接口。我希望有一种更灵活的“鸭式”方法,因为一个对象可能有很多视图,我真的不想必须全部实现它们。
通过反映接口并复制字段和属性,我在构建动态类型方面取得了一些成功,但我无法将其转换回接口类型以便在 Web 服务上获得强类型。
只是寻找一些意见和建议,两者都会受到欢迎。谢谢。