重构小结——从传参到传实体,从datatable到泛型

在介绍这些内容之前,我们首先来了解什么是面向对象,面向对象的核心是什么?

一、面向对象的简单介绍

起初,“面向对象”是专指在程序设计中采用封装继承多态等设计方法。但,后来面向对象的思想设计到了各个方面。一切事物皆对象,通过面向对象的方式,将现实世界的事物抽象成对象,现实世界中的关系抽象成类、继承,帮助人们实现对现实世界的抽象与数字建模。通过面向对象的方法,更利于用人理解的方式对复杂系统进行分析、设计与编程。

所以我们可以简单的将面向对象的核心概况为对象,也可以说是类。

二、实体的简单了解

实体类是用于对必须存储信息和相关行为建模的类。实体对象(实体类的实例)用于保存和更新一些现象的有关信息。

实体类将大量的数据进行封装然后传递,体现了面向对象程序开发的思想。在三层架构中,U层和B层的编写可以不用了解数据库的结构,通过该实体对象的属性把所需要的字段提取出来。

三、在面向对象的思想下看传参和实体

传参是传递某几个字段,而面向对象是对对象的操作。而这些字段可以看做对象的一些属性,将这些字段封装为一个实体类。所以在面向对象的思想中,我们选择了用实体代替参数进行传递。

三、三层架构中查询返回实体还是返回DataTable

DataTabel是个数据集,相当于数据表在内存中的映射,是一个临时保存数据的网格虚拟表。它是D层与数据库交互得到的产物。它的特点是:DataTabel是弱类型,围绕数据库编程的。datatable在使用时,需要了解数据库的结构,比如,我们想要获得某个字段的值,就必须知道它在数据表中的第几个字段,例:datatable.rows(1).Item(2)等。但B层和U层是不涉及数据库的,所以我们用传实体来代替DataTabel。

四、DataTable到实体的转换

DataTable到实体的转换我们用到了泛型集合。把DataTable中的每一行记录视为一个实体类,把其中的字段读取出来,存放到实体类的属性中,再把所有的实体类存在泛型集合中。因此,DataTable中有多少个记录,泛型集合中就有多少个实体类,每个实体类的属性和DataTable的字段是相对应的。

五、总结

对于单表查询,可以将DataTable与某个实体类对应,但是如果多表查询呢,没有实体类与之对应,没有实体类就没有办法转换,我们再建立一个差不多的实体?

目前比普遍的解决方案就是创建一个包含多个表的实体类,只要实体类中包含联合查询的这些表就可以。但是这样效率没DataTable高。

所以如何合理的使用实体与DataTable呢?我们可以看看这篇文章http://www.doc88.com/p-252204056930.html(仅供参考)。

时间: 2024-10-11 22:28:32

重构小结——从传参到传实体,从datatable到泛型的相关文章

cocos2dx 菜单按钮回调方法传参 tag传参

.h文件 void menuCallBack(CCObject* pSender); .cpp CCMenuItemSprite* item = CCMenuItemSprite::create( menuCB1, menuCB2, this, menu_selector(helloworld::menuCallBack)); item->setTag(m); 回调方法 void helloworld::menuCallBack(CCObject* pSender) { CCNode* node

Go语言的传参和传引用[转]

目录[-] 传参和传引用的问题 传slice不是传引用! 什么叫传引用? 为什么传slice不是传引用? 为什么很多人误以为slice是传引用呢? 传指针和传引用是等价的吗? 所有类型的函数参数都是传值的! 那Go语言有传引用的说法吗? 什么是引用类型, 和指针有何区别/联系 ? 总结 传参和传引用的问题 很多非官方的文档和教材(包括一些已经出版的图书), 对Go语言的传参和引用的讲解 都有很多问题. 导致众多Go语言新手对Go的函数参数传参有很多误解. 而传参和传引用是编程语言的根本问题, 如

Vue路由传参及传参后刷新导致参数消失处理

参考:https://blog.csdn.net/qq_43103581/article/details/82260073(vue 路由传递参数,刷新页面后参数丢失) 项目功能需要,要从列表页跳转到第三方提供的URL上(这里第三方页面我是通过iframe引入在详情页,目的是点击返回时可以通过keepAlive让列表页不刷新,如果不通过iframe直接跳第三方链接,那么返回必然会重新拉取数据),一路百度,刚开始使用 this.$router.push({name:'list', params:{i

传参-子传父

效果: const App = props => { let alerts = () => { props.alertSs(props.time) } let is = {color:props.color? "red" : "blue"} return <div onClick={alerts} style={is}>{props.time},</div>; } let Apps = ()=>{ let alertSs =

前端Vue框架 04 路由:逻辑跳转、路由传参 项目组件的数据局部化处理data(){ return{} } 组件的声明周期 组件间通信 各种第三方插件(vuex,axios,element-ui,(jq+bs))

项目初始化 """ 1)根组件:App.vue <template> <div id="app"> <router-view /> </div> </template> 2)路由配置:router/index.js const routes = [ { path: '/', name: 'Home', component: Home } ]; 3)组件:views和components文件夹 i)

python函数传参是传值还是传引用?

首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传递. 值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本.值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值. 引用传递(pass-

Postman 串行传参和动态传参详解

Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件 用Postman做接口测试的时候,要把多条用例一起执行,就需要把用例连接起来,一次性执行 目录 串行传参 动态传参 使用的接口是微信公众号开发文档里面的接口,详细请看开发文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432 首先需要获取到接口测试号,开始开发>接口测试号申请>获得appID和appsecret,位置为:htt

java中传参内幕

java中的参数传递传的其实是value. 先说一种现象,废话不多说,直接代码: A类(作为参数传递): public class A { int i=1; } B类: public class B { B(A a){ a.i+=1; } } Test类(运行类): public class Test { public static void main(String[] args) { A a = new A(); B b = new B(a); B b1 = new B(a); B b2 =

传参(转)

函数传参有三种传参方式:传值.传址.传引用. 1.按值传递 (1)形参和实参各占一个独立的存储空间. (2)形参的存储空间是函数被调用时才分配的,调用开始,系统为形参开辟一个临时的存储区,然后将各实参传递给形参,这是形参就得到了实参的值. #include<stdio.h> void swap1(int x, int y)//定义中的x,y变量是swap函数的两个形参 { int tmp; tmp = x; x = y; y = tmp; printf("x=%d,y=%d\n&qu