开发者社区> mcy247> 正文

面向对象的故事~数据底层操作告诉了我们接口,抽象类,继承与多态性的使用~续(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干的事。

本文转自博客园张占岭(仓储大叔)的博客,原文链接:面向对象的故事~数据底层操作告诉了我们接口,抽象类,继承与多态性的使用~续(TestBase继承ITest是多余的?),如需转载请自行联系原博主。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用iOS原生sqlite3框架对sqlite数据库进行操作(五)
使用iOS原生sqlite3框架对sqlite数据库进行操作
56 0
.NET数据库编程求索之路--6.使用ADO.NET实现(三层架构篇-使用List传递数据-基于存储过程)(2)
6.使用ADO.NET实现(三层架构篇-使用List传递数据-基于存储过程)(2)      【 夏春涛 email: xchuntao@163.com  blog: http://www.cnblogs.
794 0
杨校老师课堂之分布式数据库HBase的部署和基本操作
以下采用伪分布式方式搭建HBase 故而采用内置的Zookeeper协调处理,不再搭建外置ZooKeeper,因此会存在单点故障问题,若需要解决这个情况,可采用Zookeeper部署一个HA(高可用)的Habse集群解决。
19 0
使用iOS原生sqlite3框架对sqlite数据库进行操作(二)
使用iOS原生sqlite3框架对sqlite数据库进行操作
77 0
使用iOS原生sqlite3框架对sqlite数据库进行操作(三)
使用iOS原生sqlite3框架对sqlite数据库进行操作
54 0
使用iOS原生sqlite3框架对sqlite数据库进行操作(一)
使用iOS原生sqlite3框架对sqlite数据库进行操作
77 0
SAS学习笔记之《SAS编程与数据挖掘商业案例》(3)变量操作、观测值操作、SAS数据集管理
SAS学习笔记之《SAS编程与数据挖掘商业案例》(3)变量操作、观测值操作、SAS数据集管理 1. SAS变量操作的常用语句 ASSIGNMENT 创建或修改变量 SUM 累加变量或表达式 KEEP 规定在数据集中保留的变量 DROP 规定在数据集中删除的变量 ARRAY 定义一个数组 RENAME
1486 0
Java面向对象高级--对象的多态性
<p><img src="http://img.blog.csdn.net/20130926155033406" alt=""></p> <h1>向上转型:通过子类进行父类对象实例化操作。如果调用的方法被子类覆写过,则肯定调用被覆写过的方法。注意:转型之后,因为操作的是父类对象,所以无法找到子类中定义的新方法。</h1> <p></p> <pre name="code" class=
1106 0
+关注
mcy247
做自己的太阳 无需凭借谁的光
1070
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载