当前位置: 首页 > news >正文

【求助】小系统组成大系统所遇到的问题

    以下只是举例!

 

环境:

    1,通用实体库CommonEntity,里面有管理员类

class Administrator<TEntity> : Entity<TEntity>, IAdministrator where TEntity:Administrator<TEntity>{

static TEntity Login(String username, String password);

static IAdministator FindByID(Int32 id);

static IAdministator FindByName(String name);

}

        这是一个泛型类,然后有个默认的管理员类

class Administrator:Administrator<Administrator>{}

        可别晕了,尖括号里面的Administrator就是左边的那个类,而尖括号前那个,是上面那个泛型类。上面可以看到,我们还有一个IAdministator接口。

 

    2,请假模块。业务逻辑部分针对IAdministrator编程,因为不知道最终类型,没办法利用Administrator<TEntity>进行编码。

    3,出差模块。同上,只对IAdministator进行编码。

 

    4,最终项目。它要扩展管理员类,于是有

class Admin:Administrator<Admin>{

public String Address{get;set;}

}

        这个扩展的管理员类,多了一个地址Address字段。

        这个时候,需要把请假模块和出差模块集成进来,而这两个模块,根本不需要关心扩展的Address字段,因为它们只需要用到基类里面的那些字段和方法就足够了,但是那两个模块里面用的是IAdministator接口所代表的对象,必须是最终扩展的这个Admin类,而不是通用实体库CommonEntity里面的Administrator,否则会出很大的问题,例如它们俩是不同的数据表。

 

现状:

    1,目前采用的方法。请假和出差模块使用Administrator类(不是泛型那个),如IAdministator admin=Administrator.FindByID(123)。这个FindByID里面,读取配置文件,得知真正的管理员类是Admin,然后反射调用它的方法,所以最终得到的admin实际上是Admin的实例,而不是Administator的。

    2,上面的方法解决了问题,但是还有很多问题。管理员类只是一个例子,还有很多其它的类需要这样做,都这样子使用配置,最后统一起来,就会奇臭无比。

    3,假如还有一个模块,考勤模块,需要用到请假和出差,然后它又要扩展请假和出差……(你懂的!)

 

求助:

    求一个漂亮的解决方案!

我不相信神话,我只相信汗水!我不相信命运,我只相信双手!
分类: C#

本文转自大石头博客园博客,原文链接:http://www.cnblogs.com/nnhy/archive/2011/07/26/2117054.html,如需转载请自行联系原作者

相关文章:

  • Mysql之mysqlbinlog使用
  • css揭秘之linear-gradient
  • Runtime的几个小例子(含Demo)
  • javaList容器中容易忽略的知识点
  • 《AngularJS高级程序设计》学习笔记
  • centos搭建keepalived+ipvsadm实现高可用lvs分发
  • CSS Hack解决浏览器IE部分属性兼容性问题
  • Tripwire强大的服务器文件完整性监测系统-检测并报告服务器***
  • 表单验证插件----jquery validation
  • VS2013编译python源码
  • 【Java 基础篇】【第三课】表达式、控制结构
  • Microsoft Web Platform Installer 5.0
  • 这是一份优秀的餐饮行业微信营销解决方案
  • zabbix专题:附加 zabbix配置文件详解
  • 抽奖抢购算法改进版
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 5、React组件事件详解
  • Angular6错误 Service: No provider for Renderer2
  •  D - 粉碎叛乱F - 其他起义
  • Docker容器管理
  • exif信息对照
  • Flannel解读
  • js操作时间(持续更新)
  • ng6--错误信息小结(持续更新)
  • Node 版本管理
  • Vue 重置组件到初始状态
  • web标准化(下)
  • 翻译:Hystrix - How To Use
  • 和 || 运算
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 离散点最小(凸)包围边界查找
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 使用权重正则化较少模型过拟合
  • 新手搭建网站的主要流程
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • Spring Batch JSON 支持
  • #ubuntu# #git# repository git config --global --add safe.directory
  • (2015)JS ES6 必知的十个 特性
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (多级缓存)缓存同步
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (一一四)第九章编程练习
  • .bat批处理出现中文乱码的情况
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .Net mvc总结
  • @property python知乎_Python3基础之:property
  • [3300万人的聊天室] 作为产品的上游公司该如何?
  • [ABC294Ex] K-Coloring
  • [AIGC] SQL中的数据添加和操作:数据类型介绍
  • [Android 13]Input系列--获取触摸窗口
  • [C++]Leetcode17电话号码的字母组合