随笔分类 - 其它
摘要:之所以写这一篇,是因为前一篇面向服务架构~全局配置文件也面向服务了提到了性能问题,所以在这一篇文章里,主要围绕着性能来对ConfigCache这个程序集进行重构。要重构的点:1 实例创建过多,引起不必要的性能消耗2 将配置信息从文件读到内存时,然后在读内容时,去比较最后修改时间与内存中存储的时间是否...
阅读全文
摘要:回到目录我之前写一篇关于事件订阅的文章(事件的好处~实现对修改的封闭,对扩展的开放!~续),但它主要是订阅静态事件,而今天主要讲的是实例事件,即,当一个事件发布者被实例化后,去订阅它里面的事件,然后当这个事件发布者去触发该事件时,自己执行你订阅的内容,这没什么可说的,一切都很正常。但在B/s系统中,常常都有这样一种需求,即:Order类中有方法GeneratorOrder,即生成订单的方法,这个方法会被UI层的很多方法调用,以实现对不同业务产品的购买,如:购买家电产品,购买成功后应该去和家电有关的成功页;而购买日常用品,成功后应该去与日常用户相关的页面;以后还会有其它业务产品的成功页,需要我们
阅读全文
摘要:回到目录概念:一个对象的延迟初始化(也称延迟实例化)意味着该对象的创建将会延迟至第一次使用该对象时。 延迟初始化主要用于提高性能,避免浪费计算,并减少程序内存要求。以下是最常见的方案:有一个对象的创建开销很大时,应用程序可能不会使用它。 例如,假定您在内存中有一个 Customer 对象,该对象的 Orders 属性返回一个 Orders 对象。 初始化 Orders 对象可能需要创建 Orders 对象的一个大数组(Orders[]),并可能需要数据库连接。 如果用户从不访问 Orders 属性,则没有理由使用系统内存或计算周期来创建 Orders 对象。 通过使用 Lazy<Orde
阅读全文
摘要:在面向服务中讲配置文件,肯定是要把它与具体领域分离,即它有普遍的一般性。在程序开发过程中,难免会用到一些易变性,全局的常量信息,我们通常的作法是把它们放在Web.config或者自定义的文件中,当然你的配置文件可以是XML,二进制的等等,但一般时候我们选择用XML标准的文件。看全局配置项目的结构如下...
阅读全文
摘要:webMatrix可以帮助我们以一种非常容易的方式对WEB站点进行部署,不管你是WEB FORM还是MVC,它都可以很好的兼容。它不仅可以管你的WEB请求,设置WEB参数,而且它还能对你的网站数据库进行管,可以说,方便,简单,实用。当然如果与IIS比起来,这IIS Express(WebMatrix工具组中的一个小工具)的功能确实也有很多限制,如对于同一端口,只能有一个WEB站,这与IIS6下建立的网站有区别,当然这归根到底应该是IIS5本身的问题,它只有一个应用程序池,而到了IIS6就没有端口的限制了,因为它与每一个站点都分配一个应用程序池。这也了避免了一些问题,如一个程序池挂了,所有站点都
阅读全文
摘要:回到占占推荐博客索引我写过的系列文章也不少了,不过“不忘本”这个系列与其它系列不同,它自己并不成章节,每讲与其它讲都没有内在联系,它是我在实际工作中遇到的问题的一个总结,觉得有时,基础知识确实很重要。在这个系列会主要涉及到以下几点:构造函数的使用及原理抽象类主要用在什么地方,为什么微软的托管代码中有很多abstract接口是用来做什么的,是不是应该为每个操作都去定义一个接口,如何利用接口来实现面向对象的多态性枚举类型有什么特点,它在实现开发中怎么使用,为什么可以和值类型直接进行转化结构类型与类有什么区别,难道真正的开发中我们就不用它吗委托与事件的关系,怎么去理解它们简单的谈一个浅拷贝和深拷贝的
阅读全文
摘要:回到目录C#中有一个修饰符,它叫static,国人把它叫静态化的,它可以去修饰类,方法,属性,事件等元素。在100%的教科书中把static叫做静态的,对于原本就很抽象的编程语言来说,无疑使它更加抽象化了,啥是静态,静止不动?有点意思。先看一个static的应用场合代码片断:一 静态类:它在程序初始化时自动被执行1 public static class ConnectionFactory2 {...}二 静态方法和静态属性:它在类被第一次使用或第一次被实例化时,被执行1 public static string Conn=WebConfig.SQLConn;2 public static .
阅读全文
摘要:回到目录如果您看到这个题目,觉得有点怪,那说明你是一个高人,最起码比我高的多,呵呵。前几天做了一个公用后台管理系统的项目,其中有一个地方涉及到权限管理的,即为每一个按钮赋一个权限,然后它权限汇总到角色表里,即一种角色有一些操作权限,表结构如下:我们看到OperatorAuthority就是操作权限的意思,它是个int类型的,一个role有一个OperatorAuthority,那我们应该怎么把多个权限存储到OperatorAuthority字段里呢?这时,我想到了枚举类型的位运算,所以我把权限枚举设计成了这样: 1 [Flags] 2 public enum UserOperato...
阅读全文
摘要:回到目录今天发表了《将不确定变为确定~表达式树是否可以有个集合,条件过滤有了新方向》文章后,马上有朋友问起,如何实现OR查询,如果实现AND查询,事实上它说的可能并不完整,完整的话应该是,“如何实现N个字段进行OR运算和AND运算”呢,没错,我在那篇文章中,条件过滤只是针对单个字段的,是一种AND运算,也是一种条件的过滤机制,即:有条件a1,a2,a3,它的过滤方式是先过滤a1,然后在剩下的结果里过滤a2,最后再过滤a3,它相然等同于a1 && a2 && a3,但如果要实现OR运算,我的那个程序就无能为力了,看看我们伟大的JamesJim同志写的这个OR与AN
阅读全文
摘要:回到目录对于我之前项目中的统一条件过滤采用了dictinary来实现的,优点就是方法签名统一了,缺点不用说,就是字典的键容易写错,感觉一进入.net3.5之后,一切都要和Expression联系在一起,我们在创建一个Expression(表达式树)时,可以使用lambda表达式去创建,很容易:1 Expression<Func<string, bool>> predicate= name=>name=="zzl";可以看到,它其它由一个委托组成,输入参数是个字符,输出是个布尔值,在LINQ中这种技术被广泛的使用在扩展方法中,如Where扩展方法
阅读全文
摘要:回到目录接口到底是什么,应该如何去使用它呢?书上说:“接口规定了一组操作的规范,它将一些不相关的对象联系在一起”,说是这样说,但在实际当中我们应该如何去用接口,如何去用好接口呢?事实上,我一直认为,在面向对象中,接口就是大哥大,用好接口,理解好接口,你对面向对象的认识也将上升一个新的台阶,接口不可遗忘的功能就是它实现了面向对象的多态性,多态,即一种对象,在接受指定信息时,实现指定的对象实例,这其实就是我对多态的比较直观的理解。一个用户操作的接口可能是这样被定义: 1 /// <summary> 2 /// 用户相关接口规范 3 /// </summary> 4 ...
阅读全文
摘要:回到占占推荐博客索引这个系列写的我有点筋疲力尽,文章的复杂度超过了我的想像,其中在很多朋友的回复中可以看出,我的基础知识还需要提高及语言表述能力也需要提高,在此,谢谢各位的好心回复。这个系列写完成后我有个承诺,那就是把核心代码以附件的形式共享出来,如果有需要,可以单击此处进行下载。事实上“改善程序复用性”的本质应该就是你是否遵循了面向对象的原则,你的代码是否面向对象,可能一个方法的重构,一个类的抽象就是一个改善你程序复用性的方法之一,复用性是一点点实现的,它不是在最后阶段进行代码review时进行完成的,而是关系到代码从开发到完成的整个阶段。架构,改善程序复用性的设计~目录(附核心原代码)第一
阅读全文
摘要:N层架构及各层之间的通讯标准一 总体结构图二 各个模块的介绍通用项目模块Project.Common:它是对所有项目都公开的项目组合,主要提供一个与领域无关的通用功能的代码库核心项目模块Project.Core:它是针对某种构架方式(如LINQ To SQL作为底层架构)抽象出来的项目组合,它与领域无关领域项目模块,它是具体的项目,如XXB项目,它本身也是一个N层架构方式,一般地,它的UI层会继承我们的Product.Core下的Web.Commons项目,而对应的Entity对应Entity.Commons项目,由于BLL层是针对某种特殊业务领域的,所以在Project.Core里没有出现B
阅读全文
摘要:从本文标题中可以看出,主要说的是反射技术和控制反转(IOC)技术,本文主要先介绍一下我对这两种技术的理解及它们的优缺点,最后再用实例来说一下使用方法。反射:可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。这里,它最重要的是“动态性”,即根据条件动态创建“指定类型”的“实例”。1 // Using GetType to obtain type information:2 int i = 42;3 System.Type type = i.GetType();4 System.Console.WriteLine(type);结果是:Syst
阅读全文
摘要:一 如何让实体发生更新时,同时记录它更新的内容到日志表在日常生活中,有个订阅的事,如,订个报纸,当出版社出版后,报纸就会送到您家,你不用管它什么时候出版。在OA系统或者后台管理系统中,修改一条记录,总是想把它记住,等数据出问题后,好有据可查。如何去实现这样的效果呢,难道为每一个方法都写一个insertLog(log)方法吗?这也太不面向对象了吧,呵呵,做为一个懒型程序员,不会这样做的,呵呵。像这样:1 Log log=new Log{...};2 product.Update(entity);3 logRepository.insertLog(log);4 5 Log log=new Log{
阅读全文
浙公网安备 33010602011771号