面向对象的故事~数据底层操作告诉了我们接口,抽象类,继承与多态性的使用~续(TestBase继承ITest是多余的?)

在我上一篇文章发表后,收到了很多博友的回复,其中有一位博友提了一个问题,TestBase 继承了ITest是多余的,我认为,我有必要再写一篇文章来说明一下,TestBase为什么要继承ITest,当然各位也可以再次发表自己的看法。

复制代码
 1     /// <summary>
 2     /// 数据统一接口规范
 3     /// </summary>
 4     interface ITest
 5     {
 6         /// <summary>
 7         /// 插入方法
 8         /// </summary>
 9         void Insert();
10     }
复制代码

还是那个统一接口规范,这时,有个ADO.NET 的数据基类,它会去实现它,如下

复制代码
 1     /// <summary>
 2     /// 统一实体基类
 3     /// ADO.NET操作基类
 4     /// </summary>
 5     abstract class TestBase : ITest
 6     {
 7 
 8         #region ITest 成员
 9 
10         public virtual void Insert()
11         {
12             Console.WriteLine("使用ADO.NET操作方式去实现它");
13         }
14 
15         #endregion
16     }
复制代码

而我们的系统中,还有一种数据源,它叫Linq To SQL,同时它又是一个很好的ORM工具,它帮助我们很好的把实体数据库进行映射进来了。它作为由linq to sql产生的实体的基类,去实现统一接口,如下:

复制代码
 1     /// <summary>
 2     /// 统一实体基类
 3     /// Linq To SQL操作基类
 4     /// </summary>
 5     abstract class TestBase : ITest
 6     {
 7 
 8         #region ITest 成员
 9 
10         public virtual void Insert()
11         {
12             Console.WriteLine("使用Linq To SQL操作方式去实现它");
13         }
14 
15         #endregion
16     }
复制代码

这时,我们有两个数据基类去实现了这个统一操作接口,这时,如果有其它数据源,如为单元测试提供的内存流数据库,也是去实现统一操作规范。事实上,在DATA层提供了多种实现统一操作接口的方式,而它们的实体子类需要去分别继承各自的基类和自己的个性化接口接口,而最终使用哪种数据库去实现,我们可以通过IOC进行动态设定它。这只是最底层的层次,事实上,在每个实体操作的接口与实现中,还存在着这种关系,而这种关系一定会被约束在配置文件中,你可以根据配置的方式,在程序运行时去动态创建你的实例,当然这同样是IOC干的事。

posted @   张占岭  阅读(2070)  评论(8编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
历史上的今天:
2011-06-21 说说部分方法
2011-06-21 MVC中,如果从controller返回的不是一个html,而是一个文本,使用AJAX中如何获取?
2011-06-21 不使用数据绑定,分层显得更加清晰
点击右上角即可分享
微信分享提示