最近老板要在app里开展金融模块了,产品一下就丢丢丢二三十个表单下来,怎么办,赶紧写代码,有20多个表单要提交呢,得建20多个表。等等,好像这些表单很相似,公司信息,个人信息,可是还有部分不同信息怎么办?可不可以存json数据,以前有模块仍json进一个字段,让app,web自己解析,这样耦合性太高了,除了前任第一次开发方便,现任维护起来非常痛苦,那就用mongo吧,一个集合,也不用建20多个表了,但是提交接口怎么办?二三十个接口想想就吐血,那就一个接口传个object对象,有没有什么办法能传只有我想要的对象,貌似泛型可以,那就用一下吧。

  下面是本次案例代码:

 private MongoServer mongoServer = new MongoServer();
private string collName = "Financial";
/// <summary>
/// 保存表单
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="form"></param>
/// <param name="userId">用户Id</param>
/// <param name="type">表单类型</param>
public void SaveBankingForm<T>(T form, int userId, int type) where T : Financial
{
var fromJson = JsonConvert.SerializeObject(form);
//获取类型
var financialType = XmlHelper.GetType("Financial", "FinancialType", type.ToString(), "id");
//拼接json字符串
var json = "{\"userId\":" + + ",\"typeId\":" + financialType.Id + ",\"typeName\":\"" + financialType.Name + "\"" +
",\"Financial\":" + fromJson + "}";
mongoServer.Insert(collName, json);
}
public void Test()
{
//假设有三个表单,有共同的CompanyInfo属性,部分相同的Person属性,其他各自的属性
//*********投资表单*********
TouZi touZi = new TouZi();
var company = new CompanyInfo() { CompanyName = "公司1", Address = "江陵路" };
var personTz = new PersonTz() { Name = "白玉京", Mobile = "" };
touZi.Company = company;
touZi.Person = personTz;
SaveBankingForm(touZi, , ); //*********融资表单*********
RrongZi rongZi = new RrongZi();
company = new CompanyInfo() { CompanyName = "公司2", Address = "市民中心" };
var personRz = new PersonRz() { Name = "白玉京1", Mobile = "", Amount = "10000.00" };
rongZi.Company = company;
rongZi.Person = personRz;
SaveBankingForm(rongZi, , ); //*********并购表单*********
BingGou bingGou = new BingGou();
company = new CompanyInfo() { CompanyName = "陌陌", Address = "市民中心" };
var personBG = new PersonBG() { Name = "白玉京", Mobile = "", Amount = "30000.00",BGCompany="探探" };
bingGou.Company = company;
bingGou.Person = personBG;
SaveBankingForm(bingGou, , );
}
    public class PersonTz : PersonInfo
{
}
public class PersonRz : PersonInfo
{
/// <summary>
/// 融资金额
/// </summary>
public string Amount { get; set; }
}
public class PersonBG : PersonInfo
{
/// <summary>
/// 收购金额
/// </summary>
public string Amount { get; set; }
/// <summary>
/// 并购单位
/// </summary>
public string BGCompany { get; set; }
}
/// <summary>
/// 投资表单
/// </summary>
public class TouZi : Financial
{
/// <summary>
/// 企业信息
/// </summary>
public CompanyInfo Company { get; set; }
/// <summary>
/// 投资表单个人信息
/// </summary>
public PersonTz Person { get; set; }
}
/// <summary>
/// 融资表单
/// </summary>
public class RrongZi : Financial
{
/// <summary>
/// 企业信息
/// </summary>
public CompanyInfo Company { get; set; }
/// <summary>
/// 融资表单个人信息
/// </summary>
public PersonRz Person { get; set; }
}
/// <summary>
/// 并购表单
/// </summary>
public class BingGou : Financial
{
/// <summary>
/// 企业信息
/// </summary>
public CompanyInfo Company { get; set; }
/// <summary>
/// 并购表单个人信息
/// </summary>
public PersonBG Person { get; set; }
}

  定义接口只接受Financial的类型,Financial是一个空的父类,所有继承Financial的子类都可用泛型接口SaveBankingForm保存。

  比如现实生活中,我们定义一个Animal类,FlyAnimal(飞行类),LandAnimal(爬行类),WaterAnimal(水生类)都继承了Animal,再定义比如:Fish继承WaterAnimal,Tiger继承LandAnimal,所有Fish,Tiger都可以用类型是Animal的泛型方法,Tiger不能用FlyAnimal的泛型方法。tree也不能用Animal的泛型方法。

  当然每个子类都有自己的具体属性和方法,这边又会涉及到抽象工厂模式了。

  最后再贴下Test()方法运行结果。

C#泛型简单应用的更多相关文章

  1. 使用泛型简单封装NGUI的ScrollView实现滑动列表

    懒,是老毛病了,周末跑了半马,跑完也是一通累,好久没锻炼了..也是懒的,有时都懒的写博客..最近看到项目中各种滑动列表框,本着要懒出水平来的原则,决定花点时间简单处理下(暂时未做列表太多时的优化):1 ...

  2. java泛型简单学习

    一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: //import java.util.List; public class GenericTest { public st ...

  3. Java泛型简单理解

    优点1: 没有使用泛型,向list集合中添加非字符串,运行时会报错:类型不匹配 ObjectList.java: package cn.nxl2018; import java.util.ArrayL ...

  4. Java编程思想-泛型-简单泛型例子

    基本类型无法做为类型参数 代码如下: /** * */ package test.thinkinjava.Generics; import java.util.ArrayList; import ja ...

  5. java 泛型简单使用

  6. C#的泛型的类型参数可以有带参数的构造函数的约束方式吗?

    Review后看到标题让我十分羞愧自己语文功底太差,估计...请见谅......我还特地把这句写回开头了...... 问题 前天遇到的一个问题,所以在MSDN发了个问,刚也丰富了下问题,关于泛型的. ...

  7. java泛型 之 入门(interface)

    一:泛型简单介绍: (1)所谓泛型,就是变量类型的參数化. 泛型是JDK1.5中一个最重要的特征.通过引入泛型,我们将获得编译时类型的安全和执行时更小的抛出ClassCastException的可能. ...

  8. 最佳新秀Java(22)——再次了解泛型

    仿制药Java SE 1.5新功能.通用自然是参数化类型.即操作数据类型被指定为一个参数.这样的参数类型可以在课堂上使用.创建的接口和方法,他们被称为通用类..泛型方法. Java语言引入泛型的优点是 ...

  9. java泛型-泛型类,泛型接口,常用形式

    泛型简单使用: package com.etc; import java.util.ArrayList; import java.util.List; /* 泛型就相当于<>一个标签,泛化 ...

随机推荐

  1. PL/SQL FAQ in installation "make sure you have the 32 bits Oracle client installed" and "Database character set(AL32UTF8) and Client character set (GBK) are different"

    requirement : connecting to remote oracle server . now I know  the connectionURL :connectionUrl :jdb ...

  2. 【故障】MySQL主从同步故障-Slave_SQL_Running: No

    转自:http://www.linuxidc.com/Linux/2014-02/96945.htm 故障现象:进入slave服务器,运行:mysql> show slave status\G  ...

  3. linux_ssh

    什么是ssh? 配置文件位置:/etc/ssh/sshd_config 远程登录和为其他网络提供安全的加密数据传输协议,默认端口22,默认协议是SSH2 # 远程终端通过ssh连接服务器管理服务器 # ...

  4. js 数组与对象的区别

    学习javascript的时候,我曾经一度搞不清楚”数组”(array)和”对象”(object)的根本区别在哪里,两者都可以用来表示数据的集合.   比如有一个数组a=[1,2,3,4],还有一个对 ...

  5. j2e中操作EXCEL

    在j2e中操作excel,无非2种情况,在这里我贴部分代码做个例子就OK,不管是导入和导出都是操作的都是流 1,导入,浏览器输入EXCEL到java后台解析 package action; impor ...

  6. linkin大话设计模式--简单工厂

    linkin大话设计模式--工厂方法 什么是工厂方法:将多个类对象交给工厂来生成的设计被称为简单工厂模式,个人认为主要是为了实现解耦,在代码重构的时候会很重要. 代码如下: public class ...

  7. 智能机器人chatbot论文集合

    机器不学习 jqbxx.com-专注机器学习,深度学习,自然语言处理,大数据,个性化推荐,搜索算法,知识图谱 今年开始接触chatbot,跟着各种专栏学习了一段时间,也读了一些论文,在这里汇总一下.感 ...

  8. 【转】利用matlab生成随机数函数

    原文地址:利用matlab生成随机数函数 rand(n):生成0到1之间的n阶随机数方阵  rand(m,n):生成0到1之间的m×n的随机数矩阵 (现成的函数) betarnd:贝塔分布的随机数生成 ...

  9. 如何使用 highlight.js 高亮代码

    highlight 是一款简单易用的 web 代码高亮插件,可以自动检测编程语言并高亮,兼容各种框架,可以说是十分强大了.下面就简单介绍一下如何使用这款插件. 两种使用方式: 1. 手动选择主题,官网 ...

  10. 浅谈OSI七层模型及ICP/IP四层模型

    1.OSI七层模型的概念 在网络历史的早期,国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)共同出版了开放系统互联的七层参考模型. 一台计算机操作系统中的网络过程包括从应用请求(在协议栈 ...