随笔分类 -  其它

上一页 1 ··· 20 21 22 23 24 25 26 27 28 ··· 35 下一页
摘要:在第三讲中我们主要关注了代码重构的思想,从方法重构到类重构再到项目重构,这是一个过程,一种思想上的升华,今天将继续我们“程序复用性设计”的旅程,说一下方法重载的重要性。细心的朋友一定会非常关注net frameworks的源代码,即使只能看到它内部方法的定义,也足够了,在System.Web.Mvc这个命名空间下定义了很多关于MVC架构的东西,我们就以它为例来说一下方法重载吧!重载的好处:1 对方法调用的程序员来说,它是友好的(程序员只关心自己调用的方法签名即可,不用管参数为NULL怎么办这些逻辑)2 对于代码维护量来说,它是容易的(核心代码只放在参数签名最多的方法中)3 对于代码扩展来说,它 阅读全文
posted @ 2012-05-31 10:41 张占岭 阅读(2525) 评论(14) 推荐(4)
摘要:在写完架构,改善程序复用性的设计~第三讲 实现一种功能的代码只能出现在一处 , 这篇文章后,得到了园友的反馈,说这种简单的业务逻辑还可以,但业务比较复杂时,根据就没法用这种方法。针对这个问题,我觉得有必要再写一个续集了,呵呵!上回说的主要核心内容是将公用的部分从一个方法中提取出来,生成一个新的方法,这个重构中叫做“提取到方法”,另外一个核心内容就是方法的”单一职责“,即一个方法干一件事,将出现复杂事件时,将多个方法进行组合调用即可这回主要说一个重构中的提取,其实不仅方法可以被提取,类,及整个项目也可以被提取,只要他们有被提取的必要!一个例子:对于一个数据实体操作的基类,它包括了其它所有实体类共 阅读全文
posted @ 2012-05-29 23:24 张占岭 阅读(2431) 评论(5) 推荐(4)
摘要:从标题中可以看到本篇文章将介绍代码随意性的缺点及由此引发的后果,首先,来说一下同一功能的代码在多个程序中被编写多次的后果:1 它破坏了面向对象的“单一职责”的原则2 当代码逻辑复杂时,或者进行二次开发时,程序员将对方法调用产生歧义,即不知道应该使用哪个方法,即代码可读性差3 当这个不规范的方法逻辑需要修改时,你将会进行多次重复的调整,这是一个程序不希望做的事解决方法:当几个模块需要用到同一功能,或者功能相似的方法时,应该先将公用的功能抽象成一个新的方法,再把不同的地方抽象成其它方法,这也就是《重构》中的extract method 。下面看一下代码:不规范的:View Code 1 p... 阅读全文
posted @ 2012-05-28 23:34 张占岭 阅读(3050) 评论(9) 推荐(4)
摘要:之前我完了《重构,改善即有代码的设计》,这本书非常适合在编程中遇到瓶颈的朋友,看完 这本书,一定让您有一种“拨开迷雾”的感觉,事实上这本书就像标题一样,主要是讲代码重构的知识的,从变量命名到语句编写,从语句到提取方法,从方法重构 到类重构等等,每一篇文章都像是一道菜,让看过的人回味无穷,在这里班 下Martin Fowler大师。今天有点兴趣,准备按下来的几一写一下最近的作品《架构,改善程序复用性的设计》,主要从系统架构的角度,来设计一个可能被多个系统重用的公用项目集,下面是本课程的目录部分:第一讲 系统的复用性离不开系统的面向对象性第二讲 什么应该提取出来,什么应该保留第三讲 实现一种功能的 阅读全文
posted @ 2012-05-28 17:54 张占岭 阅读(2157) 评论(5) 推荐(4)
摘要:前言说明:这里说的"接口"并不是C#时的interface,而一般指定一个方法签名,它一般为外部提供一个GET请求,接口到请求后,进行处理,然后对调用方进行信息的返回.回到本题中来,事件上,我们坐下来,认真去想想,还是统一接口的比较好,如果要具体业务使用具体接口,那它的具体接口肯定也是去再调用一下"那个统一的入口模块"的,注意,这里我说的是"模块",而不是"接口,类,方法等"大体流程应该是这样:客户端调用某个服务接口接口系统调用某体业务前的逻辑 创建一个具体业务调用某体业务后的逻辑返回给客户端对于一个服务端的代码要 阅读全文
posted @ 2012-05-23 23:30 张占岭 阅读(3065) 评论(0) 推荐(1)
摘要:本系列将带您一步一步开发一个.net MVC,底层用linq to sql作为ORM的WEB应用程序,主要讲的不是开发细节,而是整体的架构方案,事实上,大部分项目架构的方式都是类似的,主要都是为业务层提供一个稳定的,可扩展的数据层,本系列主要是讲如何去设计一个基于数据仓库的Repository数据操作模型.第一回 MVC+LINQToSQL的Repository模式之(一)数据工厂第二回 MVC+LINQToSQL的Repository模式之(二)数据基类第三回 MVC+LINQToSQL的Repository模式之(三)Repository模式实现统一CURD操作,实现EF中的Find主键查 阅读全文
posted @ 2012-05-21 23:02 张占岭 阅读(2386) 评论(0) 推荐(2)
摘要:回到占占推荐博客索引 本系列的文章主要是讲C#基础,面向对象OOP及OOD的相关知识,而且本系列文章将一直会更新下去,感谢您的阅读 基础才是重中之重系列~目录 第一回 基础才是重中之重~类是怎么执行的 第二回 基础才是重中之重——面向抽象编程(抽象类的多态性) 第三回 基础才是重中之重——派生类集合 阅读全文
posted @ 2012-05-20 23:40 张占岭 阅读(7713) 评论(5) 推荐(14)
摘要:回到目录本文中的“二”,指的是二进制,即看见2就进一,也叫逢二进一,它是最为简单和清晰的数据,在现实生活中,人们用的最多的就是十进制数据,即逢十进一,看一下例子:二进制: 十进制0 001 0110 0211 03100 04看到了吧,在二进制中,不会出现比1大的数,除了0就是1,而在十进制中,不会出现10,它由0~9这10个数字组成。在我们的C#中,位运算分为左位移和右位移,分别用<<和>>表示,左移相当于向左移位,右面补0,例如:10 << 1 它的含义是10 0,它最后的结果就是100,相当于10进制的4,这时我们难看出左移1位,相当于乘2操作,返之还 阅读全文
posted @ 2012-05-09 17:31 张占岭 阅读(839) 评论(0) 推荐(1)
摘要:回到目录首先将来说一下Dispose是什么东西吧,对于我们使用非托管的资源时,需要自己去实现Dispose这个方法,它的含义就是释放使用的内存空间。例如Stream这个类型,它就是一个非托管类型,它会实现一个IDisposable接口,来实现Dispose方法像TransactionScope,.net事务,它也是一个非托管的,也就是说,我们在使用完事务后,需要自己去进行Dispose()操作,下面问题就来了,这个Dispose写在哪里合适呢?注意看这段代码:using (TransactionScope trans = new TransactionScope()) { ... 阅读全文
posted @ 2012-05-08 16:46 张占岭 阅读(956) 评论(2) 推荐(2)
摘要:在进行项目整体架构设计时,我们应该明确知道哪些项目是可以被重复再利用的,而哪些项目是与领域模块关系密切的,对于后者我们是应该在解决方案中保留的,而前者则是应该提取出来的。在一个完整的解决方案中,应该是由“公用的类库”,“核心的项目基础层”和“与业务领域关系密切个性项目组”组成的,对于我开会的那个项目来说,也是遵循这样一个原则:将与领域和项目无关的项目进行抽象,形成一个最基础的层,称为Project.Common将与架构模式有关,而与领域无关的项目,形成一个架构模式核心层,称为Project.Core将与指定领域有关的,个性化业务组成的代码,叫做领域层,它的名称由项目含义确定在这篇文章里,我们主 阅读全文
posted @ 2012-05-06 23:18 张占岭 阅读(1490) 评论(1) 推荐(2)
摘要:本文章主要以上一篇文件的代码在写法上进行一个优化,更代码更精简,更能发挥.net 3.5为我们提供的已有功能,呵呵!首先,为了只有返回值的委托来说,我们是不用再去定义它的,完成可以用.net提供的Func<T>这个委托来实现同时,这个委托也支付多个输入参数的情况,和Func<>对应的一个委托叫Action<>,它没有返回值,可以由多个输入参数,下面是对Func<> 委托的使用实例,同样使用上一篇文章作为例子public class ReturnMessage { public static event Func<string> Ret 阅读全文
posted @ 2012-05-04 11:27 张占岭 阅读(1000) 评论(0) 推荐(1)
摘要:事件是这样的,我觉得用事件来做这事比较好,它很好的遵循了“开闭原则”,当然这并不是最重要的,最重要的应该是它更符合程序开发的原则。场合:一个订单处理问题,一个订单的产生可能由多种途径生成,A产品走A产品的订单处理过程,完成后显示A产品的订单成功页,B产品走B产品的购买流程,完成后,显示B产品听订单成功页,当然陆续可能会有C产品,D产品等等实现:不考虑订单处理业务,只考虑订单成功页的显示解决1:由A产品页向订单统一处理程序传递参数,在订单统一处理程序里去判断参数,然后显示信息解决2:A产品订阅一个事件,去返回订单成功后显示的页面,在订单统一处理程序里触发这个事件,然后自己显示指定信息从上面两解决 阅读全文
posted @ 2012-05-03 14:07 张占岭 阅读(1173) 评论(0) 推荐(0)
摘要:非常抱歉让大家等了这么久,这个系列的第一讲才开始,呵呵,目录写出来后,就是按着目录一个一个的讲出来,与大家一起分享我的开发经验了,呵呵。 今天主要说一下“系统的复用性离不开系统的面向对象性”,我们可能有一种感觉,那就是在开发一个项目时用到了一段代码块,在另一个项目中也用到了,我们通常的作法就是ctrl+C,然后ctrl+V,呵呵,这样做的好处就是省事,不好的地方也是“不省事”,为什么这样说呢? ... 阅读全文
posted @ 2012-04-27 16:01 张占岭 阅读(2593) 评论(1) 推荐(4)
摘要:文章中解决的问题:1 Linq to SQL不支持返回显示实体问题 2 解决了实体中导航属性为集合时类型转换错误的问题 实体的设计: /// <summary>/// Linq原-生ú态类à型í的派é生ú类à,用来′临ù时±保£存结á果集ˉ/// </summary>public class WebManageUsers_Ext : WebManageUsers { }/// <sum... 阅读全文
posted @ 2012-04-27 10:49 张占岭 阅读(1092) 评论(0) 推荐(0)
摘要:回到目录答案是肯定的,一个DBML模型可以对应多个数据库,只要数据库中的表与模型中定义的表结构完成相同,就可以这个技术,我们可以用来开发一些通用的功能模块,如通过后台管理模块,我们将一些通用表进行抽象,如,对用户,角色,部门,菜单等进行抽象,将它的模块建立在我们的公用项目中,然后对这个模型进行操作,在建立DBContext上下文时,我们需要保留一个连接字符串,即,真正的项目中用哪个库,我们这个串就指定哪个库就行了。如图,后台表结构然后,它个模块可以用别对应包含这几个表结构的数据库,呵呵通用后台系统我会在之后的文章中给大家讲到,今天先看一下它的图像,呵呵大家可以看到,对于每一个项目的功能和作用, 阅读全文
posted @ 2012-04-26 11:20 张占岭 阅读(1633) 评论(6) 推荐(2)
摘要:回到目录如果在linq中希望进行一对多的复合查询时,请直接在查询中使用join into,或者使用let 关键字,当然在建立实体时动态赋值对于查询的性能也是没有影响的,两次查询结果完成相同一 :在实体中赋值var linq = from data in this.GetModel() join data2 in iWebDepartmentsRepository.GetModel() on data.DepartmentID equals data2.DepartmentID select new WebM... 阅读全文
posted @ 2012-04-26 10:11 张占岭 阅读(1082) 评论(1) 推荐(1)
摘要:回到目录在使用框架页时,它的子框架页面不能正常加载,而单独访问每个子页面是可以访问的,产生这个问题的原因是由于你的frameset节点位置不正确在网页中,它不能放在<body></body>之间,必须放在它的外面才行,就像这样:<html></head> <frameset rows="60,*" frameborder="no" border="0" framespacing="0"> <frame src="/Account/Statu 阅读全文
posted @ 2012-04-26 09:22 张占岭 阅读(1682) 评论(0) 推荐(1)

上一页 1 ··· 20 21 22 23 24 25 26 27 28 ··· 35 下一页