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

    以下只是举例!

环境:

    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,假如还有一个模块,考勤模块,需要用到请假和出差,然后它又要扩展请假和出差……(你懂的!)

求助:

    求一个漂亮的解决方案!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏移动开发之家

Flutter完整开发实战详解(二、 快速开发实战篇)

 作为系列文章的第二篇,继《Flutter完整开发实战详解(一、Dart语言和Flutter基础)》之后,本篇将为你着重展示:如何搭建一个通用的Flutter ...

711
来自专栏玩转JavaEE

Ajax上传图片以及上传之前先预览

手头上有几个小项目用到了easyUI,一开始决定使用easyUI就注定了项目整体上前后端分离,基本上所有的请求都采用Ajax来完成。在文件上传的时候用到了Aja...

4048
来自专栏ASP.NET MVC5 后台权限管理系统

ASP.NET MVC5+EF6+EasyUI 后台管理系统-分配角色给用户

由于之前做了将权限赋给角色,还需要做将角色组赋给用户,和将用户赋给角色组,一个用户可以拥有多个角色组,一个角色组包含多个用户,打开模块管理,添加一个分配的操作码...

1795
来自专栏积累沉淀

Struts2声明式验证

声明式验证步骤 一 、编写Action类 package com.tg.action; import com.opensymphony.xwork2.Acti...

1707
来自专栏Android干货

xUtils类库的使用

2054
来自专栏移动开发之家

Flutter完整开发实战详解(二、 快速开发实战篇)

 作为系列文章的第二篇,继《Flutter完整开发实战详解(一、Dart语言和Flutter基础)》之后,本篇将为你着重展示:如何搭建一个通用的Flutter ...

1113
来自专栏编舟记

Java高编译低运行错误(ConcurrentHashMap.keySet)

本地使用maven编译和运行时一切都正常,但是通过ci的方式,编译、打包、发布到部署环境,运行时抛出了一条显而易见的JDK版本的错误。

603
来自专栏salesforce零基础学习

salesforce 零基础学习(二十七)VF页面等待(loading)效果制作

进行查询的情况下,显示友好的等待效果可以让用户更好的了解目前的状态以及减少用户消极的等待,例如下图所示。 ? VF提供了<apex:actionStatus>标...

1605
来自专栏芋道源码1024

注册中心 Eureka 源码解析 —— 应用实例注册发现(六)之全量获取

本文主要分享 Eureka-Client 向 Eureka-Server 获取全量注册信息的过程。

970
来自专栏用户2442861的专栏

Java Web 中使用ffmpeg实现视频转码、视频截图,javaffmpeg

http://www.cnblogs.com/dennisit/archive/2013/02/16/2913287.html#!comments

331

扫描关注云+社区