前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【求助】小系统组成大系统所遇到的问题

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

作者头像
大石头
发布2018-03-12 17:35:35
7350
发布2018-03-12 17:35:35
举报
文章被收录于专栏:智能大石头

    以下只是举例!

环境:

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

求助:

    求一个漂亮的解决方案!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2011-07-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档