随笔分类 -  其它 / 面向对象

摘要:之前我完了《重构,改善即有代码的设计》,这本书非常适合在编程中遇到瓶颈的朋友,看完这本书,一定让您有一种“拨开迷雾”的感觉,事实上这本书就像标题一样,主要是讲代码重构的知识的,从变量命名到语句编写,从语句到提取方法,从方法重构到类重构等等,每一篇文章都像是一道菜,让看过的人回味无穷,在这里班 下Martin Fowler大师。今天有点兴趣,准备按下来的几一写一下最近的作品《架构,改善程序复用性的设计》,主要从系统架构的角度,来设计一个可能被多个系统重用的公用项目集,下面是本课程的目录部分:第一讲 系统的复用性离不开系统的面向对象性第二讲 什么应该提取出来,什么应该保留第三讲 实现一种功能的代码 阅读全文
posted @ 2012-04-23 22:34 张占岭 阅读(694) 评论(3) 推荐(1) 编辑
摘要:今天主要想说一个MVC+LinqTOSql的系统架构中哪些东西可以,也应该进行抽象.MVC的WEB层应该进行抽象的是:统一的Controller,将其它controller公有的属性和方法进行一个抽象,方便以后扩展和维护.代码可能是这样: /// <summary> /// Controller基类 /// </summary> public abstract class ControllerBase : Controller { /// <summary> /// 通用信息(一般由service层返回的) /// </summary> prot 阅读全文
posted @ 2012-01-08 23:49 张占岭 阅读(997) 评论(0) 推荐(0) 编辑
摘要:几个常用的全局常量 调用Web.config节点的方法 阅读全文
posted @ 2011-12-11 00:15 张占岭 阅读(507) 评论(0) 推荐(0) 编辑
摘要:项目为何要设计成N层架构?为何会有WEB,BLL和DAL,这些东西我们今天姑且不说,单说为什么要把BLL层进行抽象。 在之前我的博客中有一篇对WEB层的Controller进行了抽象,实现上对BLL层也可以进行一个必要的抽象,将大部分公用 的属性和方法进行抽象,提取到一个新的抽象类中,让其它BLL的业务逻辑类型去继承它,享用它内部公用的属性和方法 ,这在以后维护和扩展及程序稳定性上都非常重要... 阅读全文
posted @ 2011-12-09 21:24 张占岭 阅读(3073) 评论(0) 推荐(1) 编辑
摘要:将所有controller的公共属性和方法提取出来,放到一个controller基类里,共其它controller使用,这无疑不是一个好的选择,以下是我的项目中controller层的抽象,分享一下代码:/// <summary> /// Controller基类 /// </summary> public abstract class ControllerBase : Controller { #region Fields #endregion #region Constructor #endregion #region Properties /// <summ 阅读全文
posted @ 2011-12-04 00:38 张占岭 阅读(1231) 评论(0) 推荐(0) 编辑
摘要:回到目录上一篇文章主要让大家知道了基类与派生类,及它们的转换关系,即它们不能相互转换,只能从派生类转换到基类,下面来看一个抽象类和它派生类实现的一种编程方式,即面向抽象的编程。以下是面向抽象的编程实例:(完整代码) 1 /// <summary> 2 /// 基类 3 /// </summary> 4 abstract class parent 5 { 6 public string name { get; set; } 7 } 8 /// <summary> 9 /// 派生类110 /// </summ... 阅读全文
posted @ 2011-12-02 11:36 张占岭 阅读(2707) 评论(4) 推荐(1) 编辑
摘要:回到目录派生类可以直接强转为类基类型,而反之则不可以,它们的集合也具有这种特性以下实例是parent是基类,sub是它的派生类,如果有一个sub类型的集合希望转换为parent,那是可以的,它可以广泛的应用于面向接口和面向抽象的编程环境中。 1 class parent 2 { 3 public string name { get; set; } 4 } 5 class sub : parent { } 6 7 #region 由派生类集合强转成父类集合(正确) 8 List<sub> subl... 阅读全文
posted @ 2011-12-02 11:33 张占岭 阅读(2092) 评论(3) 推荐(1) 编辑
摘要:namespace System.Linq.Dynamic{ public static class DynamicQueryable { public static IQueryable<T> Where<T>(this IQueryable<T> source, string predicate, params object[] values) { ... 阅读全文
posted @ 2011-11-07 23:04 张占岭 阅读(1507) 评论(1) 推荐(0) 编辑
摘要:首先它是一个具有返回类型为ViewResult的一个方法,也就是说,我们可以通过返回ViewResult对象来代替View()方法,下面的操作是合法的 ViewData.Model = model; return new ViewResult { ViewName = viewName, MasterName = this.MasterFile, ViewData = ViewData, TempData = TempData }; 它在一般情况下等同于return view(model),这是微软为我们封装好的方法,让我们省去了不少代码,它的view(object model)方法原型可能. 阅读全文
posted @ 2011-11-04 10:35 张占岭 阅读(4382) 评论(3) 推荐(1) 编辑
摘要:今天用LINQ的update出现问题了,LINQ的BUG不少,呵呵,所以自己把TSQL拿出来,做了一个封装,适用的所有表,更新有两种,普通更新和记数更新看代码:这两个方法是写在DAL里的数据操作基类里的,只有它的子类可以用它,所以用protected做为限制 /// <summary> /// 通用更新方法 /// </summary> /// <param name="tableName">表名</param> /// <param name="param">参数列表,奇数为字段,偶数为他前一 阅读全文
posted @ 2011-10-28 15:50 张占岭 阅读(875) 评论(0) 推荐(0) 编辑
摘要:<script type="text/javascript"> //一个面向对象的JS例子,很好的支持了开闭原则 function HtmlControl(options) {//定义一个方法 var el = options.element; el.style.width = options.width; el.st... 阅读全文
posted @ 2011-09-16 10:10 张占岭 阅读(1149) 评论(0) 推荐(0) 编辑
摘要:有一些概念我们清楚,但在实际中不知道如何去用,这往往是C#初学者的一个共同的问题,今天我来讲的就是“浅表拷贝”,简单来说就是把一个对象,一模一样的复制出来一份来,但浅表拷贝只复制原对象的引用地址,在改变新对象时,原来对象不会改变,而深表拷贝是完全拷贝,在改变新对象时,原对象也会受到影响。以下是浅表拷贝的实现,利用了MemberwiseClone方法class People { public string Name { get; set; } public string Email { get; set; } public People ShallowCopy() { //直接使用内置的浅拷贝方 阅读全文
posted @ 2011-09-15 10:04 张占岭 阅读(791) 评论(1) 推荐(0) 编辑
摘要:Ninject可以帮助我们解耦,提高类的内聚度,它的使用非常简单,看下面代码: 首先下载Ninject.dll这个动态链接库文件,可以到DLL大全里下载 public interface ISay { void Write(string message); } public class ChinaSay : ISay { ... 阅读全文
posted @ 2011-09-05 15:36 张占岭 阅读(1470) 评论(1) 推荐(0) 编辑
摘要:项目完成了,现在进入了维护阶段,一切都很平静。。。 突然有一天,老板来了个需求,要求用户有一个新的功能,即会员可以为好友推荐,进行本网站,当推荐的人真的来本网站注册后,并进行了邮件确认后,同时要给那个会员一些好处,比如,送它积分。 这个需要无疑要牵动用户表,这可如何是好,是在原表基础上改,还是。。。 首先如如果在原表上改,牵动太大,所以就想到了面向对象的“开闭原则”,在不改变原表的同时,添加... 阅读全文
posted @ 2011-08-31 16:09 张占岭 阅读(770) 评论(2) 推荐(0) 编辑
摘要:事件是这样的,我的每个页面都有一些属性,我拿其中一个属性PageTitle为例,它是一个ArrayList 它是页面标题导航的意思,就是说它的标题用来存储一些标题导航,比如,产品列表页,它的PageTitle可能被解释为 我的网站 > 产品 > 产品列表,而其它页面的标题导航的表现形式也大同小异。 了解的领域模式之后,现在我们再来看程序的实现: #region 抽象产品 (Abst... 阅读全文
posted @ 2011-08-22 17:19 张占岭 阅读(518) 评论(2) 推荐(0) 编辑
摘要:我们知道枚举默认和int类型是可以直接强转换的,并不会出现任何错误,但对于其它类型来说, 有可能会有问题,比如,一个enum类型, 如下声明会有错误 enum ProductColumns { ProductId=1, . . . Status=4294967297, } OK,这样的话,程序会报错,因为它已经超过了int型的范围(int型其实就是Int32结构体类型,32表示最大存储的整型范围... 阅读全文
posted @ 2011-08-19 00:03 张占岭 阅读(1110) 评论(1) 推荐(1) 编辑
摘要:关键字是为了方便大家使用,而特意为.net拿出来直接使用的类型,如int,short,long,string,delegate及enum等类型都是关键字,现在说一下它们的原型(F2键,转到定义可以看到) int => public struct Int32 short => public struct Int16 long => public struct Int64 string => pub... 阅读全文
posted @ 2011-08-18 15:20 张占岭 阅读(391) 评论(0) 推荐(0) 编辑
摘要:这比通过使用的扩展方法来实现枚举描述要复杂一点,就是代码多了一点,原理很简单,就是定义一个枚举类型,然后定义一个字典,字典为<枚举,字符>,然后为它赋值即可,代码如下:namespace Entity.Commons{ public enum Status { Normal = 100, PendingApprove = 300, Deleted = 400, Blocked = 500, } /// <summary> /// 状态描述 /// </summary> public class StatusDescribe { /// <summary 阅读全文
posted @ 2011-08-17 10:49 张占岭 阅读(676) 评论(6) 推荐(0) 编辑
摘要:解除依赖就是松耦合,松耦合就一定好吗?当然不是程序的耦合度与内聚度要放在一起说,当然,对于领域层来说,适当的减少类与类之间的依赖是很有必要的,看下面我的这段代码 一个例子,一个订单系统,它根据国家有不同的下单方法,对于低层(DATA层)是一样的,但对于领域层,也叫业务逻辑层,它是不一样的,可能小日本下单打5拍,中国人下单不打折,我也是可以理解的,因为中国石油在对于中国人上是很吝啬的,而对于小日本则慷慨解囊。不多说了,看代码: /// <summary> /// 订单实体 /// </summary> class Order { } #region 传统作法,无有考 阅读全文
posted @ 2011-08-11 16:53 张占岭 阅读(571) 评论(3) 推荐(1) 编辑
摘要:(合理运用) 因为图像尺寸只有两个属性,宽和高,也没有什么更复杂的应用逻辑,所以用构结而不用类 (代码清晰) 对于一个类来说,如果它的属性对外部是不可写的,我们可以使用以下方法,如果对于一个类来 说,它的构造方法可以根据实际业务情况进行重载方法的设计,如下,如果建立实现zzl时,不 传递任何参数,它的默认值就是zzl,密码就是zzl123,这样设计的好处就是减少了用户实例化时 的代码量。 (结构清晰) 对于一个对象来说,如果它的内部功能需要与很多对象使用,那应该把它提升为一个抽象基类,把它只对子类开发的属性的访问权限控制为protected,把自己可以实现的并且子类可以去复写的方法设置为v 阅读全文
posted @ 2011-08-10 12:29 张占岭 阅读(1283) 评论(2) 推荐(0) 编辑