扩展DLL中的Model
在一个网站中,要对调用WCF服务返回的结果集数进行一次计算,但是原有的数据也要保存起来,老的数据和新的数据都要存库。对于这样的需求,其实最好的方法是就是直接修改服务端的Model,但是这个服务调用的地方太多了,如果这样修改的话,影响点会比较大,而且并不是所有的调用方都要这样处理,比如说接口用户,就没有这样的需求。因此这个需求只能客户端网站自己处理。
需求是工作中遇到的,撇开原始场景,可以抽象成下面这样的情况:
说明:现在要根据用户的习惯,来决定显示在页面上的商品信息。网站用户查询商品信息,Web网站调用商品查询服务,返回商品订单列表给用户。没有加需求之前,可以理解为商品查询服务返回出来的商品信息是什么,就给用户显示什么,现在要预测用户的习惯,展示商品信息,并且要创单将新旧两种信息存库。
我不知道其他人在面对这样的需求时,会怎么做,我的第一反应是,新建一个商品信息子类(ProductSub),继承商品查询服务的商品信息(Product)。然而这依然有一大堆麻烦。
商品查询服务的商品Model是比较复杂的,网站会把查询出来的商品信息都存入Session中,用户在页面上选中一条商品,创单的时候,再从Session中把这个商品信息取出来,封装订单服务创单的对象,创建订单。我的想法是,先把查询出来的每一个Product转换成ProductSub对象,再查询用户习惯,进行处理,把该填充的数据填充进去,再进行排序之类的页面展示顺序的调整。创单的时候,把ProductSub对象转换成Product对象,把要存储的信息放到一个Information对象中,创单
我遇到的一个麻烦就是,Product类不能直接转为ProductSub类的。C#基础知识,这个时候,我就想起了一个扩展类。具体怎么用,参见这篇博客:http://www.cnblogs.com/WindBlog/archive/2011/07/29/2120655.html,但其实放到Bussiness也是可以的。但是我觉得如果我用到product对象对象就能直接点出ParseProductSub类的方法应该是更好的。另一个问题是,在创单的时候,如果把ProductSub对象强制转换为Product对象的话,调服务的时候会报一个错误因为ProductSub,我想着肯定是订单服务并没有这个类,只有Product类。于是我在ProductSub类中写了一个方法ParseProduct,里面的方法,就是调用了一个return base.Copy(),就是调用返回父类的一个深复制类。
写这篇文章的目的,是想如果发现了更好的办法,我就明天来悄悄咪咪改得更加高级一点,但是现在想来,我可能根本没有把问题描述清楚。我看前一个人的处理方式是,直接新建一个类VMInfo
类似这样,我就纠结了很久在这两种方式上,最后我还是选择上面一种。
public class VMInfo { public Product product { get; set; } // 这是新的类 public OtherInfo otherInfo { get; set; } }
结果是我想多了,这篇文章很快被博客园移除掉了,而且需求也变得没有那么复杂,怎么做都可以了。但是我的代码还是保留在,因为如果不存储字段信息的话,就至少需要算两次。这个是因为计算简化了,算两次我也不复杂。我觉得蛮奇怪的是,我以前写的博客,什么排版布局都没有还没有被移除首页,这次是我花了一个小时多写的,结果被移除了,大概是内容不好,原来排版也不是那么重要。
出处:http://www.cnblogs.com/BestNow/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?