翔如菲菲

其实天很蓝,阴云总会散;其实海不宽,此岸连彼岸.

导航

2011年3月12日 #

浅谈C#中的延迟加载(2)——善用virtual

摘要: 之前的文章“浅谈C#中的延迟加载(1)——善用委托”中介绍了三层结构中在Model层对实体类的属性实现延迟加载的方法,该方法利用C#中的委托来实现,最后虽然延迟加载的目的得以实现,但是给客户端(例如UI层)暴露了不必要的属性(一个委托对象,我使用了泛型的Fun类来实现)。这篇文章介绍一种方法来隐藏这个属性,同时又可以达到延迟加载的目的,更重要的是这一切都是在之前的基础上来完成的,不需要改变原来使用到实体类的地方的代码。 按照惯例,我们考虑一下想要我们的代码达到什么效果:首先在Model.Acticle(文章实体类)中的Category属性和原来一样,只在需要的 时候通过调用委托来获取文章所属分 阅读全文

posted @ 2011-03-12 11:07 翔如飞飞 阅读(192) 评论(0) 推荐(0)

浅谈C#中的延迟加载(3)——还原模型的业务规则

摘要: 啊~~最近的业余时间都用在修改博客上面了,主要是这段时间在网站的留言板上发现很多外国的垃圾广告,于是做了个“IP黑名单”的功能,留言和文章评论也都加了验证码,顺便把后台的代码整理了一下,希望新加的验证码不会对大家留言和发评论造成不便! 上一篇文章讲 到把实体类中需要实现延迟加载的属性声明为virtual,然后继承实体类做一个子类,在子类里面实现该属性,配合使用委托来实现比较完美的延迟加载(原 本的”模型层“依旧保持在最底层用于贯穿三层结构,同时又可以实现在实体类的属性里面访问到比他高层的”数据访问层“)。文章的最后依旧出现杯具,原因是 在对模型的属性实现延迟加载之前,这个属性可能由于我们业务的 阅读全文

posted @ 2011-03-12 11:07 翔如飞飞 阅读(185) 评论(0) 推荐(0)

浅谈C#中的延迟加载(1)——善用委托

摘要: 很久以前就听过“延迟加载”这个东西,不过没有理解是什么意思,现在算是了解一二了,写点文章作为读书笔记,把自己的想法记录一下,希望对初学者帮助,不管是初学者或者高手如果发现文章那里写得不好或者有更好的思路和做法记得告诉我哦^^。文章打算写成两三篇,这个是第一篇。 在三层结构中我们通常会使用多一个叫做“模型层”的东西,这一层中最主要做的事情是把数据库中的表 (或者其他数据源,例如xml或者自己定义的一种数据格式)转成对应的类,例如有一个文章表,这时候在这一层就会有一个文章类;文章类的属性对应着文章表的列,例如文章标题属性对应文章标题列。 实体类和数据表一一对应是最简单的情况,这时候实体类和实体类是 阅读全文

posted @ 2011-03-12 11:05 翔如飞飞 阅读(161) 评论(0) 推荐(0)

较为理想的延迟代理的编写方式

摘要: 之前我谈到,在普通情况下我们可以很轻松地写出过一个代理类,用来处理延迟加载的情况。当时给出了一个很简单的做法,也就是指创建基类,覆盖它的一些属性实现,类似这种:public class LazySomeClass : SomeClass{ public override int SomeID { get { return this.LazySomeID.Value; } set { this.LazySomeID.Value = value; } } public Lazy<int> LazySomeID { get; set; }} 不过我当时也提到,这么做可能够用,但是也有一些 阅读全文

posted @ 2011-03-12 11:03 翔如飞飞 阅读(187) 评论(0) 推荐(0)

explicit 和 implicit 的含义

摘要: explicit 和 implicit 属于转换运算符,如用这两者可以让我们自定义的类型支持相互交换explicti 表示显式转换,如从 A -> B 必须进行强制类型转换(B = (B)A)implicit 表示隐式转换,如从 B -> A 只需直接赋值(A = B)隐式转换可以让我们的代码看上去更漂亮、更简洁易懂,所以最好多使用 implicit 运算符。不过!如果对象本身在转换时会损失一些信息(如精度),那么我们只能使用 explicit 运算符,以便在编译期就能警告客户调用端示例: Codeusing System;using System.Collections.Gene 阅读全文

posted @ 2011-03-12 10:59 翔如飞飞 阅读(838) 评论(2) 推荐(1)