n层,Linq和WCF

时间:2012-06-10 14:27:36

标签: wcf performance linq serialization deserialization

我们有一个n层架构:

-a WCF服务,它与数据库通信并处理所有业务逻辑。 - 与WCF服务通信的ASP.NET MVC网站。

这是从数据库到'吉他'的html视图的数据序列化 - 反序列化的场景:

-Guitar_1由linq生成的一个类, -Guitar_2由WCF服务公开的DataContract,由ASP.NET MVC网站使用。 -Guitar_3传递给View的模型

当最终用户想要检索吉他时,Guitar_1会被转换为Guitar_2,然后转换为Guitar_3。这真的不是问题,但如果最终用户请求吉他列表,那么每个吉他都会重复所有这个过程(一个循环)。

如果我必须以编程方式处理所有序列化 - 反序列化的东西,我每层只有一个类。它仍然可以通过在Linq类上注释'DataContract'/'DataMember'在wcf项目中完成,但是如果我刷新我的数据库模型,我的所有注释都会消失(同样的情况就是ASP.NET MVC项目,刷新服务引用删除所有添加的代码。)

此外,使用这些自动序列化器真的更有效吗?编写序列化器 - 解串器所花费的时间与注释类(DataContract / DataMember)和处理类Guitar1到Guitar_2的转换所花费的时间相同...再加上失去性能(循环和转换)......

你们觉得怎么样?你们有些人的代码就像过去那样吗?

更新:正如'Abhijit Kadam'所建议的那样,我在使用Web服务时使用了部分类,但是,在使用Linq2SQL:POCO类时,我找到了更好的解决方案。

1 个答案:

答案 0 :(得分:2)

如果主要关注的是框架创建的模型类是自动重新生成的,并且您更改了类似注释,那么在这种情况下您可以使用partial classes, info here。如果自动生成的类是Employee。然后在单独的文件中创建一个部分类Employee,并在此部分定义中包含要注释的字段。此课程不会被删除和重新生成。但是,当您编译代码时,生成的Employee类将是Original Employee类和部分定义的Employee类的组合。

同样从Guitar_1班级转换为Guitar_2也是可以的,有时我们必须做这些事情以满足特定要求。我更喜欢通过网络传输JSON数据,如从WCF到MVC Web,然后浏览器将从MVC APP获取json数据。然后我使用jsrender或knockout等框架在客户端(浏览器)将数据呈现为HTML。 JSON是可读的,紧凑的,javascript和javascript库都喜欢json。