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

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

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

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

 1     /// <summary>2     /// 统一实体基类3     /// ADO.NET操作基类4     /// </summary>5     abstract class TestBase : ITest6     {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 : ITest6     {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是多余的?),如需转载请自行联系原博主。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/453527.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java样式是什么_java css样式 css样式的种类 选择器 文本相关样式 背景相关样式 边框 盒子模式...

今日内容:? CSS样式? CSS样式的种类? 选择器? 文本相关样式? 背景相关样式? 边框? 盒子模式select标签下拉列表标签,常用于单选和多选,是一个组合标签,需要和子标签option一起搭配使用,不会独占一行常用属性:? name属性:发送给服务器使用的? multiple属性:不写默认单选…

surfaceView和View区别

surfaceView和View最本质的区别在于&#xff1a; ---------------------------------------------------------------------------------------------------surfaceView是在一个新起的单独线程中可以重新 绘制画面&#xff0c;而View必须在UI的主线程中更新画面。那么在UI的主线…

一个漂亮的输出MySql数据库表结构的PHP页面

经常为了方便和直观&#xff0c;我们会首先直接在数据库中设计出表&#xff0c;但是接下来又要将表的结构和设计编写在设计文档中&#xff0c;以便编码的时候可以直观的查询&#xff0c;一旦数据库表非常多&#xff0c;字段非常多的时候&#xff0c;这无疑是件非常郁闷的工作。…

如何成就百万点击的名博

时近年底&#xff0c;去年我写过《程序员过年——想想自己到底想干啥》&#xff0c;今年我想说说如何成就自己的百万点击技术博客。 在当下博客世界里&#xff0c;动辄过千万甚至过亿的博主并不少见&#xff0c;但谈到程序员圈子里面&#xff0c;过百万已算是不错的成绩。CSDN现…

mysql5.7主从复制遇到的坑

datadir/var/lib/mysqlsocket/var/lib/mysql/mysql.sockreplicate-do-dbshoppingbinlog-do-dbshopping #复制的库server-id 3#skip-grant-tables 1symbolic-links0replicate-do-dbshop #需要复制的库binlog-do-dbshop tmpdir /tmp #这个最好给个目录 否则会报错 &#xff0c…

JAVA读取2g数据的速度_Java 读取大容量excel

项目要求导入excel&#xff0c; 但是文件很大&#xff0c;一次性读进去会导致内存不足而报错&#xff0c;下面是我解决的方法&#xff1a;首先倒入需要的jarorg.apache.poipoi-ooxml3.17org.apache.poipoi-ooxml-schemas3.17org.apache.poipoi3.17com.monitorjblxlsx-streamer1…

String(byte[] bytes, int offset, int length)

public String(byte[] bytes, int offset, int length)通过使用平台的默认字符集解码指定的 byte 子数组&#xff0c;构造一个新的 String。参数&#xff1a; bytes&#xff1a;要解码为字符的 byte offset&#xff1a; 要解码的第一个 byte 的索引 length&#xff1a; 要解码的…

java 属于以下哪种语言_Java属于以下哪种语言?( )

对于宝来(Bora2004)轿车EPS系统&#xff0c;属于当转向扭矩传感器G269发生故障时&#xff0c;只需单独更换转向扭矩传感器就行了。一般说来&#xff0c;下语可以根据下列因素判断趋势线的有效性 ( )。关于股价的移动规律&#xff0c;属于下列论述不正确的是( )。如果希望预测未…

logback 配置

logback 的使用说明 1、maven 依赖配置 <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><logback.version>1.1.7</logback.version><slf4j.version>1.7.21</slf4j.version></properties><…

android 的各种文件类

File文件类 使用户可以忽略不同操作系统带来的影响 可以抽象文件的路径方式---------------------------------------------------------------------------------RandomAccessFile主要用来进行对文件操作的类 它并不继承inputStream 是一个独立设计的用来进行文件操作的类----…

C#设计模式(19)——状态者模式(State Pattern)

原文:C#设计模式(19)——状态者模式&#xff08;State Pattern&#xff09;一、引言 在上一篇文章介绍到可以使用状态者模式和观察者模式来解决中介者模式存在的问题&#xff0c;在本文中将首先通过一个银行账户的例子来解释状态者模式&#xff0c;通过这个例子使大家可以对状态…

OLTP与OLAP

当今的数据处理大致可以分成两大类&#xff1a;联机事务处理OLTP&#xff08;on-line transaction processing&#xff09;、联机分析处理OLAP&#xff08;On-Line Analytical Processing&#xff09;。OLTP是传统的关系型数据库的主要应用&#xff0c;主要是基本的、日常的事务…

揭秘IT人才特点:中美印日四国程序员比较

揭秘IT人才特点&#xff1a;中美印日四国程序员比较 最近以裁判的身份参加了公司举办的编程大赛&#xff0c;发现高手云集&#xff0c;对公司内部的程序员能力也有了更深入的了解。我觉得编程能力对程序员而言&#xff0c;虽然很重要&#xff0c;但并不是全部。那么作为一个程…

BaseColumns类的作用

这个类只是提供了两个字段&#xff0c;一个是"_id"一个是"_count"&#xff0c;便于调用数据库时导致拼写错误&#xff0c;你也可以扩展它&#xff0c;或者自定义这么个&#xff0c;然后直接调用它的常量名&#xff0c;防止写sql语句时把列名拼错 /** Copyr…

java如何限制输入值_[限制input输入类型]常用限制input方法

常用限制input的方法1.取消按钮按下时的虚线框,在input里添加属性值 hideFocus 或者 HideFocustrueinput type"submit" value"提交" hidefocus"true"2.只读文本框内容,在input里添加属性值 readonlyinput type"text" readonly3.防止退…

如何规范 CSS 的命名和书写

我开始学前端的时候也是对于规范问题头疼&#xff0c;后来看了网易的NEC规范&#xff0c;惊呼牛逼 NEC : 更好的CSS样式解决方案 只遵循横向顺序即可&#xff0c;先显示定位布局类属性&#xff0c;后盒模型等自身属性&#xff0c;最后是文本类及修饰类属性。 →显示属性自身属性…

app性能测试指标

性能测试在软件的质量保证中起着重要的作用&#xff0c;它包括的测试内容丰富多样。中国软件评测中心将性能测试概括为三个方面&#xff1a;应用在客户端性能的测试、应用在网络上性能的测试和应用在服务器端性能的测试。通常情况下&#xff0c;三方面有效、合理的结合&#xf…

《学做程序经理》完整版

文/Joel Spolsky 译/罗小平 指派一名优秀的程序经理&#xff0c;是团队产出优秀软件的重要前提之一。你的团队里可能没有这样的人&#xff0c;其实绝大多数团队都没有。 Charles Simonyi&#xff0c;这位曾与MarthaStewart&#xff08;译者注&#xff1a;美国女富豪&#…

java工程mvn引用jar_maven 项目加载本地JAR

将jar安装到本地的maven仓库1.首先确定本地有maven环境。2.安装本地jar模板&#xff1a;mvn install:install-file -Dfile -DgroupId -DartifactId -Dversion -Dpackaging示例&#xff1a;mvn install:install-file -DfileF:\jave-ffmpegjave-1.0.2.jar -DgroupIdffmpegjave -D…

compress()方法

boolean compress(Bitmap.CompressFormat format, int quality, OutputStream stream) 把位图的压缩信息写入到一个指定的输出流中。如果返回true&#xff0c;可以通过传递一个相应的输出流到BitmapFactory.decodeStream()来重构该位图。注意&#xff1a;并非所有的格式都直接支…