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

    以下只是举例!

环境:

    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 条评论
登录 后参与评论

相关文章

来自专栏owent

boost.context-1.61版本的设计模型变化

之前写了个C++的协程框架libcopp,底层使用的是boost.context实现,然后剥离了对boost的依赖。然而这样意味着我必须时常跟进boost.co...

4871
来自专栏欧阳大哥的轮子

从Xcode10不再支持libstdc++说起

众所周知从Xcode10起,苹果摒弃了对libstdc++库的支持转而支持libc++库了。这两个库在Xcode9甚至更早的版本就已经同时存在于系统中并且可供开...

2443
来自专栏GopherCoder

『Go 内置库第一季:net/url』

其实这是一个比较小的内置函数,主要用在网络请求方面上,可能最多的用途也就是用来处理网络请求的参数。当然如何你经常在项目中编写restfulAPI, 那么你也可能...

1192
来自专栏DOTNET

学会WCF之试错法——数据传输

服务契约 [ServiceContract] public interface IService { [OperationCon...

3116
来自专栏有趣的django

Django rest framework源码分析(1)----认证

一、基础 1.1.安装 两种方式: github pip直接安装 pip install django-rest-framework 1.2.需要先了解的一...

53211
来自专栏有趣的django

35.Django2.0文档

第四章 模板  1.标签 (1)if/else {% if %} 标签检查(evaluate)一个变量,如果这个变量为真(即,变量存在,非空,不是布尔值假),系...

55710
来自专栏吴裕超

Protocol Buffers 在前端项目中的使用

公司后端使用的是go语言,想尝试用pb和前端进行交互,于是便有了这一次尝试,共计花了一星期时间,网上能查到的文档几乎都看了一遍,但大多都是教在node环境下如何...

3374
来自专栏跟着阿笨一起玩NET

url传递中文的解决方案

本文转载:http://www.cnblogs.com/ghd258/archive/2005/10/23/260241.html

1942
来自专栏扎心了老铁

python语言中的AOP利器:装饰器

一、前言 面向切面编程(AOP)是一种编程思想,与OOP并不矛盾,只是它们的关注点相同。面向对象的目的在于抽象和管理,而面向切面的目的在于解耦和复用。 举两个大...

3678
来自专栏生信技能树

生信人的linux考试

一、在任意文件夹下面创建形如 1/2/3/4/5/6/7/8/9 格式的文件夹系列。 二、在创建好的文件夹下面,比如我的是 /Users/jimmy/tmp/1...

3937

扫码关注云+社区