关于霏昀

☑80后 ☑双鱼 ☑猫 ☑技术男 ☑Web前端 ☑秋裤男 ☑窝囊废 ☑内拉祖里 ☑弃机从文中 ☑右派 ☑开放社会敌人的敌人

ADO.NET乱弹

随手写的数据库课作业,可能有错,看看就好

—————————————————————-

ADO.NET是M$最新的数据访问技术。在windows 2000的技术体系中数据访问技术被称为ADO+――类似于COM+、Form+、ASP+,但是2000发布时只携带了COM+的实现。而随着M$的.NET战略,ADO+最终被用基于.NET的语言所实现,表现为.NET Framework中的一组类库,并命名为ADO.NET。
因为M$善于混淆完全不同技术的特长,ADO.NET被命名了一个类似ADO的名字,然而我们注意到实际上ADO.NET与ADO几乎没有任何关系,这是一个不同的新模型。ADO.NET遵循更通用的原则,不那么专门面向数据库。ADO.NET集合了所有允许数据处理的类。这些类表示具有典型数据库功能(如索引、排序和视图)的数据容器对象。从总体设计上来看,ADO.NET不像ADO模型那样以数据库为中心,这是 ADO.NET 的一大特点。
ADO.NET包含两种数据访问方式――在线的以及离线的。在这里是存在争议的,因为有人认为这两种方式是同样重要的。然而个人观点是,在线模型更多的是为实现离线模型而存在的。当然不否认在线模型在访问小量数据以及悲观并发时的作用(另外当ADO开发人员尝试过渡到ADO.NET上时在线模型可以起到让他们误以为两种技术相似的混淆作用),但从.NET的技术体系上讲离线模型才是被推荐的。以下只讨论离线模型。
DataSet是ADO.NET(1.0版本中)离线模型中存储数据的核心类。DataSet的重要之处在于它不仅包含DB中的data,还包含DB的meta-data。DataAdapter连接数据库填充DataSet时,它同时将DB中的结构信息填充入DataSet,这包括列数据的类型、约束等等。这样就等于在内存中建立了一个数据库的副本――当然只包含小量的数据。而操作这个内存副本就像操作数据库一样――比如可以使用Sql来对其进行检索。
另外DataSet的重要特性是它在其中数据发生修改后,它会保存数据为修改时的副本。这样DataSet天生就是乐观并发的。实际上在DataAdapter连接DB更新DataSet中的数据时,它默认使用乐观并发的策略。
除了在运行时刻填充DB的meta-data外,M$提供一种称为强类型数据集的方式来访问。通过VS.NET中提供的一系列Wizard来在静态时创建一个类型安全的数据库结构映像――强类型数据集。这样我们就可以避免了大量诸如:
r[‘count’] =  (int)r[‘count’] ?C 1;
的操作,而以一种直观的方式来使用DataSet(在.Net语言的Property特性的帮助下):
r.Count = r.Count ?C 1;
然而使用向导的一贯问题在这里依然存在。任何对向导生成代码的修改,在每次重新生成后都不复存在。而且这种代码生成方式给程序员带来测试困难以及不可控感一直广遭诟病。当然如果我们考虑到M$的主要精力总是放在降低程序员的门槛以及不断加强所谓的“快速开发”上,那么以上的行为全都不难理解。
从上我们可以看到在一定程度上ADO.NET超出了一般的数据访问技术。DataSet(特别是强类型DataSet)在DataGrid的辅助下就足以构建一个解决方案。但正如Martin Fowler在PEAA中谈到的,人们经常批评M$的解决方案中没有对象。DataSet实际上是一种被Martin Fowler称为表模块(以及表入口)的业务层+数据源模式,然而在OO被广泛证明价值的今天,想用DataSet+DataGrid来完全代替OO+O/RMapping,可以认为是可笑而愚蠢的――当然我们还是要注意M$的精力主要放在“快速开发”上。
值得注意的是一个多月之前,在Channel9上Ander向我们展示了一个被称为DLINQ的疑似O/RMapping方案(在TSS上有争论)。在ObjectSpace失去音信的时候,这也许是值得每一个.NET开发人员期待的。

鼎好,眉州东坡,新办,汉城小豆腐,etc

小肥羊(青岛),火锅。其实不确定是不是正宗,因为问都没问直接上了麻酱……不过锅底还是很不错的,该有的都是ms差不多都有了。因为穷,ms大学以后涮锅是没直接涮海鲜吃过的。虾、蟹都很新鲜,尤其是蟹确实比北京的更有蟹味道(前几天去学校旁边吃10元每人限一只的特价大闸蟹,蟹黄超多可是肉一点味道都没有)――不过这里吃蟹ms是不给姜醋的,不习惯的确实伤脾胃。贝类点了不少,扇贝之类是生下到锅里(有点残忍)熟了之后就会张开。至于羊肉、蔬菜没任何特别之处。加上去秦皇岛那次的,结论就是海鲜这种东西还是要去海边吃得好。

鼎好,港式茶餐。茶点都是3块一份,的确比较便宜,不过除了虾饺以及刚出炉的蛋挞以外其他的没有什么留下印象的,很一般。除了茶点还要了一份干炒牛河,油太大了,很难吃。

眉州东坡,川菜。去了两次(本来说这学期不吃重复的地方的,不过第二次是别人保研bg也就跟去了,30多人花了1600多也着实不便宜),基本上有名的菜式全点了。凉菜黄瓜皮、酥豌豆很不错,腊肠据一四川同学说很正宗。热菜就平淡了一些,东坡肘子炖得很烂,肥瘦也刚刚好,可惜调味有点奇怪――总体觉得不如学一的酱肘子……豆花、黑笋牛腩等等之类的不也就是不好不坏的样子。看网上对那里小吃很赞的样子,不知是不是去的分店的原因,酸辣粉、担担面、炒饭全都不好吃。米酒是乳白色的,我土以前没见过,反正味道比原来喝的透明的差一些。

新疆伊斯兰饭庄(新办),新疆菜。真理是不要太多男生一起坐一桌……一盘菜上来一人一筷子就没有了T_T。烤包子、羊杂汤、芫爆散丹很赞,其他的大盘鸡、囊包肉、烤羊腿之类也就是大盘大盘的肉――个人觉得估计这种菜也体现不出水平差不多是个新疆来的人开饭馆味道都差不多,事实也是和南门外的亲亲一家人没太大区别。没吃到抓饭,刚去的没点后来加菜的时候再点说已经没有了……羊肉串肥瘦调味都很好,就是那么大一根签子上就那么几块肉实在有点可怜。自制的酸奶很普通。囊炒肉里囊切得嫌碎了还有点炒过了的感觉,不好。

酷玩,酒吧。眉州bg完那天去的。点了一杯长岛冰茶、一杯金汤力。原来没喝过金汤力,不知道这杯酒应该是怎样的,不过拿过来的两杯都是高杯长饮的。长岛冰茶, vodka + rum + tequila + gin(好像还有一种记不清了),那天确实有点醉,只感到了Gin和可乐。后来再喝金汤力更是没什么印象了。

汉城小豆腐,韩式。门前在修地铁(我印象里已经修了很长时间了),所以如果只是沿途经过估计是找不见。进门爬到三层楼才是,我ft。菜品炒五花肉、招牌豆腐、鸡排沙拉。炒五花肉不错――每次自己烤的五花肉都被我烤成硬片了,所以说厨师的水平还是比我高。鸡排沙拉好大一盘,适合食肉一族。招牌豆腐,豆腐很细,里面还有虾和贝类――不过我从青岛回来海鲜是有点吃伤了,但相对来说不是很喜欢。小姐把石锅中的饭盛出来以后往里加了水,说是饭后喝一点锅巴泡的水很助消化,不过我喝了一口觉得泡完以后也还是清水……

LINQ,C#想干嘛……

以成为世界上最复杂的语言为己任?呵呵。不过看C#3.0(VB9)还是有点启发。

记得原来说python要加入静态接口的时候,以为在动静融合这条路上动态语言有动态类型可能是要方便一下。不过现在C#3.0要把这些原来CLR不支持的特性在轻度修改CLR的基础上,大部分职责全推给编译器来搞,倒很是让我想起C++静态多态(泛型)的做法来,充分发挥编译器能力这一点上来说,静态语言倒是拥有长足的优势,虽然

var i=new A()

写出这种东西,然后让编译器来推理类型,不如动态类型那么自然,但是效率上的得益在这里又不能忽略了,而获得的能力(匿名类型、匿名方法,还有传说中VB9的动态接口)又足以实现DLINQ这种东西了(虽然不怎么喜欢这个方案)。效率和表现力的比拼,在这方面可能更大程度上要去看硬件的表现了――真的有一天能略掉反射的损失的话,哼哼……