最近老板要在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. Angular4+路由

    路由的作用就是(导航):会加载与请求路由相关联的组件,并获取特定路由的相关数据,这允许我们通过控制不同的路由,获取不同的数据,从而渲染不同的页面: 几种常见的路由配置: Angular路由器是一个可选 ...

  2. UML图学习之三 状态图

    状态图(Statechart Diagram)主要用于描述一个对象在其生存期间的动态行为,表现为一个对象所经历的状态序列,引起状态转移的事件(Event),以及因状态转移而伴随的动作(Action). ...

  3. Django之Model组件

    Model组件在django基础篇就已经提到过了,本章介绍更多高级部分. 一.回顾 1.定义表(类) ##单表 from django.db import models class user(mode ...

  4. 2018/1/28 每日一学 单源最短路的SPFA算法以及其他三大最短路算法比较总结

    刚刚AC的pj普及组第四题就是一种单源最短路. 我们知道当一个图存在负权边时像Dijkstra等算法便无法实现: 而Bellman-Ford算法的复杂度又过高O(V*E),SPFA算法便派上用场了. ...

  5. Django_xamdin安装与使用

    有比Django更加强大的admin? xadmin? pip install xadmin 如何让xadmin生效? 新增两个注册app,xadmin,crispy_forms,通过run mana ...

  6. Linux下安装mysql(yum和源码编译两种方式)

    这里介绍Linux下两种安装mysql的方式:yum安装和源码编译安装. 1. yum安装 (1)首先查看centos自带的mysql是否被安装: # yum list installed |grep ...

  7. jsp小结

     JSP执行步骤 完整步骤: 第一步:用户通过浏览器发出一个Http请求: 第二步:web服务器识别是对jsp页面的请求: 第三步:jsp容器通过jsp引擎将jsp页面转化为servlet代码(纯ja ...

  8. android 中的ExpandableListView取消一级图标

    mainlistview = (ExpandableListView) view.findViewById(R.id.listview_myteacher); mainlistview.setGrou ...

  9. 02_HTML5+CSS详解第二天

    html5大纲分析工具:https://gsnedders.html5.org/outliner/ <section> <h1>HTML部分</h1> <se ...

  10. 【转】5 Best Place to Learn Linux – Linux Tutorial Sites

    Linux have amazed every tech guy and make them curious to hands on Linux. Many of us not feel Linux ...