加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

一致化外部数据源管理

发布时间:2020-12-17 01:10:06 所属栏目:安全 来源:网络整理
导读:考虑这样一个背景:A系统有一张人事表,B系统也有一张人事表,且B中有一些A中没有的人员属性。如果A需要引用这些数据,该如何处理呢? 实际上,通过View,WebService,数据同步,数据直接访问,都可以达到这个目的。但是如果A作为一个中心系统,还需要访问C,D,

考虑这样一个背景:A系统有一张人事表,B系统也有一张人事表,且B中有一些A中没有的人员属性。如果A需要引用这些数据,该如何处理呢?

实际上,通过View,WebService,数据同步,数据直接访问,都可以达到这个目的。但是如果A作为一个中心系统,还需要访问C,D,E…等系统所特有的数据,该如何处理呢?比较好的办法是做一个通用的外部数据源管理模块,通过简单的设置和公共方法,达到方便一致取用这些数据的目的。

???

??????

图一 SystemA可以通过emp_id关联到其他系统的人事数据

?

实现方式如下:

1.? 首先做这个数据串联有个基础,必须存在一个Global ID,如上图的emp_id等。

2.? 定义全局的数据源,设定服务器路径,账号密码等。

数据源常用的类型有Oracle,SQLServer,Mysql,其它的数据库类型可以使用DSN。

3.? 通过引用Global ID作为Sql中的参数来定义一系列扩展属性。如下

?

数据源:Oracle ERP

扩展属性:

???????? 职位:??? select position from user_list where id=’@global_id’

???????? 入职日:select duty_onfrom user_list where id=’@global_id’

???????? …

?

4.? 在设计上,采用工厂模式。IExtDatasource接口定义了3个方法。

IsValid - 验证数据源能否正确链接

TryGetData - 验证定义的扩展属性SQL是否正确。

GetData - 根据实际参数值获取数据

???

工厂类实现:

因为WebService和一般数据库数据源所需参数不同,因此参数类使用了泛型

    public static class DataSourceFactory
    {
        public static IExtDataSource Create<T>(DataSourceType dataSourceType,T context)
        {
            switch (dataSourceType)
            {
                case DataSourceType.SQLServer:
                    return new SQLServerDataSource(context as DatabaseDataSourceInfo);
                case DataSourceType.Oracle:
                    return new OracleDataSource(context as DatabaseDataSourceInfo);
                case DataSourceType.DSN:
                    return new DSNDataSource(context as DatabaseDataSourceInfo);
                case DataSourceType.WebService:
                    return new WSDataSource(context as WSDataSourceInfo);
                default:
                    throw new NotImplementedException();
            }
        }

调用示例:

IExtDataSource  dataSource= DataSourceFactory.Create<DatabaseDataSourceInfo>(DataSourceType.Oracle,new DatabaseDataSourceInfo()
                        {
                            ServerName = "",DatabaseName = "",UserName = "",Password = ""
                        });
 
                    dataSource.ConnectionString= connectionString;        
Dictionary<string,string> dic = new Dictionary<string,string>();
                    dic.Add("SQL",strSQL);
 
                    DataSetds = dataSource.GetData(dic);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读