随笔档案 - 2011年8月
.NET简谈组件程序设计之(上下文与同步域)
2011-08-29 13:36 by 南京.王清培, 1064 visits, 网摘, 收藏, 编辑摘要:我们继续学习.NET多线程技术,这篇文章的内容可能有点复杂。在打破常理之后,换一种新的思考模型最为头疼。这篇文章里面会涉及到一些不太常见的概念,比如:上下文、同步域等等。我也是最近才接触这些关于组件编程方面的高深技术,大家一起学习,再大的困难也是有时间限制的,只要我们坚持。 在本人的上一篇文章“.NET简谈组件程序设计之(多线程与并发管理一)”中,只是初步的带领我们学习一下关于多线程的一些基本的原理,包括线程切换,线程的开始、执行、等待、结束。 这篇文章的重点是学习关于线程的同步、互斥的机制。在多线程的应用程序中,最少会有一个主线程在运行着,如果我们想提高应用程序的吞吐量就必须借助多线程的原理来实现。[王清培版权所有,转载请给出署名] .NET上下文(ContextBoundObject对象) 阅读全文
.NET简谈组件程序设计之(初识.NET线程Thread)
2011-08-27 21:33 by 南京.王清培, 1313 visits, 网摘, 收藏, 编辑摘要:由于多线程的内容比较多我会用几篇文章来讲解。 多线程在我们日常开发过程中用的很多,上一篇“.NET简谈组件程序设计之(异步委托)”详细的讲解了基于委托的多线程使用,委托是基于后台线程池的原理,这篇文章将主要介绍直接使用Thread对象来实现多线程。 当然使用Thread没有使用Delegate那么容易,毕竟多线程跟异步调用是两个相差很大的技术方向,我也是略懂点皮毛,在此献丑给大家,如有讲的不对的地方还请指出。[王清培版权所有,转载请给出署名] 我们先来理解几个概念,以方便我们学习。 后台线程与前台线程 前台线程:什么叫前台线程,就是我们使用默认的Thread创建出来的没有进行IsBackground属性设置的都是前台线程,因为默认IsBackground是false。前台线程是明确任务的,也就是任何一个前台线程没有结束之前程序是不会自动退出的,除非强制关闭应用程序。 阅读全文
.NET简谈组件程序设计之(异步委托)
2011-08-24 15:42 by 南京.王清培, 1606 visits, 网摘, 收藏, 编辑摘要:说到委托我想大家基本上都用过的,今天这篇文章就来讲解关于委托的异步奥秘。 在我们正常使用的时候很少会去用异步委托技术来提高代码效率。委托的好处就是能对方法进行面向对象的封装,随意传递。在任何组件客户代码中都能对其进行调用,而不是传递方法对象的引用,这样能大大的降低代码的耦合。事件就是运用委托的优势进行对象的消息传递。。[王清培版权所有,转载请给出署名] 那么什么是异步委托呢?简单点讲就是异步的调用一个方法,但是如果我们直接用工作线程(main入口进行来的)去调用方法的话,肯定是做不到异步的。想要异步调用必须用子线程去完成,让主线程能处理一些关键的事情,比如用户界面响应、按钮事件的处理。不能让用户等待这是原则。 下面我们就来学习关于异步委托的相关技术。 我们先看一段简单的代码1: 阅读全文
.NET简谈组件程序设计之(delegate与event关系)
2011-08-15 11:36 by 南京.王清培, 1706 visits, 网摘, 收藏, 编辑摘要:本人最近一段时间在学习关于.NET组件编程方面的技术,在学习过程中确实有很多好的东西需要与大家分享。[王清培版权所有,转载请给出署名] 关于什么叫组件编程,其实就是利用.NET来开发基于组件模型的程序,面向组件编程而非面向对象编程,这是一个高度,没有很长时间的学习与磨练 是体会不到这个感觉的。我们现在的开发思想应该是以面向对象为主的,但是如何提升这个高度,只有慢慢的学习了。 其实面向组件编程包含了面向对象编程思想,将一组功能独立的封装起来供以后重复使用,但是在开发组件的过程中需要使用到面向对象的思想来构 造组件,这两个概念不矛盾,面向对象思想是具体实现,而面向组件思想应该说是站在一个产品或者说是一个框架的高度来宏观的形容。 阅读全文
.NET之降龙十八掌
2011-08-10 10:40 by 南京.王清培, 3079 visits, 网摘, 收藏, 编辑摘要:金庸的“天龙八部”我想我们都看过,最近心血来潮又看了一遍。乔峰的形象塑造的几乎完美,我们都不会忘记他的“降龙十八掌”。在片中有各门各派、各种神奇武功,但是在我们眼里最帅的、最厉害似乎还是乔峰的“降龙十八掌”。每当乔峰带领大家遇到强大的敌人时,就会使出他的看家本领“降龙十八掌”来保护他的兄弟们。 其实这篇文章本人是想将一些关于学技术的心理感悟写出来,供大家分享。[王清培版权所有,转载请给出署名] 时间过的真快,本人在.NET方向工作也快两年了,在这不知不觉的成长过程中,我发现自己对技术的欲望越来越强,胃口越来越大。在技术这个行业里,我们都知道需要专注、沉淀,信念才行。这是前辈们用一生总结来的经验,只有默默的坚持,脚踏实地的一步一步的向前走,就一定会有收获 阅读全文
.NET简谈设计模式之(适配器模式)
2011-08-01 19:50 by 南京.王清培, 1145 visits, 网摘, 收藏, 编辑摘要:我们继续学习设计模式系列文章。 今天我们要学习的是设计模式中的适配器模式,适配器模式其实也比较好理解,光从它的名字我们都能理解个所以然了。 适配器模式定义:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 上面的这段话可能对初学者来说有点抽象,短短的一段话提到了几个关键的技术点。都是一些基本语法,如果我们还没有掌握这些语法最好还是先去解决前提再来攻克设计模式。 那到底啥叫适配器模式,这个“适配”很形象、生动的形容了所表达的意思,那么一般用在什么地方呢?怎么来解决一些接口不兼容的情况下的问题。下面我们就来由浅入深的进行理解、学习。[王清培版权所有,转载请给出署名] 阅读全文
随笔档案 - 2011年7月
.NET简谈设计模式之(命令模式)
2011-07-29 16:35 by 南京.王清培, 1017 visits, 网摘, 收藏, 编辑摘要:我们继续学习设计模式系列文章。 本篇要讲的是命令模式,其实命令模式也比较好理解,没有用到多高深的技术,也不需要多复杂的抽象。只需要我们脑海里能有一个大概的原型,等我们遇见类似问题的时候我们能通过巧妙的方式来解决。我们做应用层开发的大部分接触的都是一些模式、框架、思想等等,不像搞低层开发的,他们研究的可能多数是一些技术实现的问题,而我们是学习实现的方法论。应用层开发在技术的复杂程度上是有限的,在组合技术的实现上是复杂的。所以有一些.NET架构师确实比较厉害,他们能很早的就料到会出现什么问题,他们有很强的架构思想,对设计模式的掌握、对架构设计思想、对敏捷、极限 阅读全文
.NET简谈设计模式之(单件模式)
2011-07-29 13:48 by 南京.王清培, 1228 visits, 网摘, 收藏, 编辑摘要:我们继续学习设计模式系列文章。 今天要讲的是单件模式,其实单件模式是比较简单的设计模式,在我们日常开发过程中也是经常用到的。 单件模式:单件模式是一种用于确保整个应用程序中只有一个类实例且这个实例所占资源在整个应用程序中是共享时的程序设计方法。 我想如果初学者对一些基本概念能熟练掌握 阅读全文
.NET简谈设计模式之(抽象工厂模式)
2011-07-27 14:31 by 南京.王清培, 1354 visits, 网摘, 收藏, 编辑摘要:我们继续学习设计模式系列文章。 今天要讲的是设计模式中经常被用到的“工厂模式”,所谓工厂模式就是将对象的创建交给一个叫做工厂的对象来统一进行处理。主要是将对象的依赖关系进行解耦,消除对象之间的直接耦合。那么工厂的使用有几种方式呢?那就要看我们对工厂的理解了,工厂是创建对象的一个逻辑名称,工厂可以是一个方法、一个静态类等等。只要起到对象的创建就能给它赋予上一个工厂的名称。 那么什么是抽象工厂呢?我想很多人对它的理解并不是很透彻,甚至有的人就觉得工厂一定要是抽象的。我表示不理解,一个抽象类中连一个抽象的、虚的成员都没有,我想问这个类是干什么用的,仅仅是模仿《设计模式》中的例子在做吗 阅读全文
.NET简谈设计模式之(装饰者模式性能问题?)
2011-07-24 16:44 by 南京.王清培, 803 visits, 网摘, 收藏, 编辑摘要:我假设看这篇文章的朋友对装饰者模式都能有各自的、深入的理解。因为这篇文章是讨论装饰者模式的性能问题。 在本人的“.NET简谈设计模式之(装饰者模式)”一文中比较详细的讲解了装饰者模式的一般应用,但是我总是感觉装饰者模式隐隐约约之中有点不完美。经过我昨天一整天的思考、推敲终于找到了它隐隐约约中的那点不完美是什么,为了行为去继承带来的无辜的性能开销。所以本人想把它写出来,跟大家讨论下装饰者模式的性能该如何平衡。是用时间换空间还是用空间换时间,这里的时间就是我 阅读全文
.NET简谈设计模式之(装饰者模式)
2011-07-23 11:31 by 南京.王清培, 996 visits, 网摘, 收藏, 编辑摘要:装饰者模式其实有点难以理解,特别是对初学者来说可能有点晕,因为它的概念互相冲突,哪里互相冲突我们下面会讲解到。 本人保持一贯的写作风格,重在入门。在本人的这篇文章中会用一个比较恰当的比喻来让我们对问题迎刃而解,例子虽然简单但是重点突出。 在写这篇文章之前我在网上大概搜了一下关于“装饰者模式”的一些文章,但是讲解的效果都不太理想。要么就是找书搬过来的,要么就是对着书的例子从新创造一个。我看了大概三四篇这样子,不行看着头晕。文章的主人很想把问题的关键说清楚,但是很少能在原有代码的基础上画龙点睛,搞不好就是画蛇添足。如果没能清楚的介绍模式代码中的任何一脚,都有可能給看文章的初学者带来新的问题,没能够透彻的体现出文章的重点。下面我们从理清头绪开始。[王清培版权所有,转载请给出署名] 设计模式是用来解决某一个问题的一个方法,一个模式是对应着 阅读全文
程序员该如何规划自己的人生
2011-07-20 19:47 by 南京.王清培, 2604 visits, 网摘, 收藏, 编辑摘要:其实大大小小的文章讨论程序员的人生规划不计其数。本人还是坚持谈谈个人对于程序员日后规划的看法,也是本人做事的一种风格跟对人生的态度吧。希望能给大家有点帮助。 首先我们庆幸的是我们是软件行业的一员,我们作为程序员从最基础的“农民工”开始的,从反反复复的代码中成长起来。我们要为我们的职业感到骄傲才对,他赋予了我们善于动脑的习惯,程序员每天要应对的问题多种多样,我们要快速的思考,不知不觉我们锻炼出了思考的习惯。[当思考成为习惯,成功将随之而至] 思考是前进的本质,我们在当初能进入程序员行业,就说明我们还是喜欢挑战的。但是话说回来,程序员的最终是需要归宿的,我们不可能一辈子这样处于“基层”。所以我们需要思考,我们以后的归宿在哪里,等过了三十岁,我们的本钱是什么。可能你会说我有的是编程的经验,是项目经验,我框架写的很好。技术就好比水,“可载舟亦可覆舟”。 阅读全文
.NET简谈设计模式之(策略模式)
2011-07-20 11:30 by 南京.王清培, 1288 visits, 网摘, 收藏, 编辑摘要:策略模式在我们日常开发中经常被用到,这篇文章不是策略模式的深入讨论和学术研究,只是让初学者能有个基本的了解。 什么叫策略:1. 可以实现目标的方案集合;2. 根据形势发展而制定的行动方针和斗争方法;3. 有斗争艺术,能注意方式方法。 什么叫模式:模式(Pattern)其实就是解决某一类问题的方法论。把解决某类问题的方法总结归纳到理论高度,那就是模式。模式是一种指导,在一个良好的指导下,有助于你完成任务,有助于你作出 阅读全文
.NET简谈路由事件
2011-07-18 16:11 by 南京.王清培, 2310 visits, 网摘, 收藏, 编辑摘要:本篇文章讲解关于路由事件的相关原理。 什么叫路由事件,字面理解就是事件是可以传递,路由的意思也好理解。路由事件其实就是,事件是会随着某种变化,来回传递。路由事件其实在.NET2.0时期就已经存在了,只不过在一般开发过程中用不到。 从C#3.0开始,就已经封装了关于路由事件的机制。其实这种实现应该可以换个名字来解释。我们可以给路由事件起个便于理解的名字,“事件的路由设计模式”。我们都知道,任何大的框架都是从微小的基本 阅读全文
会写代码的项目经理
2011-07-16 11:39 by 南京.王清培, 2580 visits, 网摘, 收藏, 编辑摘要:也许文章的标题起的带有讽刺的味道,其实这也是本人的一个小小的疑问。 一个项目的领导者该不该对技术有一点深度的了解或者说项目经理应该是一个不错的高级程序员。我的头跟我说项目经理不需要写代码也不需要对技术有多了解,只要对项目的进度有个整体的把控就OK了。这种观念一开始我不太赞同,项目经理对技术的实现没有一定的了解,在安排进度的时候是不是会草率的了事。给程序员预留的时间也不能准确的控制好,是不是会导致项目的进度控制的不太合理; 在参与开发项目的时候尤其是有一定技术含量的时候,更要项目经理对技术的实现有自己独特的见解,能帮助程序员理清头绪。但是话说回来,项目经理不可能帮每个程序员都去解决技术问题。在一些中小企业,项目经理显的很“肥胖”,这种“肥胖”完全是脱俗的,对技术似乎已经到了一种炉火纯青的高度,总觉得技术无非就是增、删、改........ 阅读全文
.NET实现之(自己动手写高内聚插件系统)
2011-07-12 18:00 by 南京.王清培, 2758 visits, 网摘, 收藏, 编辑摘要:今天跟大家分享一下本人在“.NET简谈构件系统开发模式”一文中提到的软件架构设计思路的具体实现细节。 大家看了我这篇文章后,总问我为什么要起个这么怪异的名字“构件”而不用“插件”。其实这个名字在我脑子漂浮了很久,一直找不到合适的场合用它。 在一本书上是这样解释构件的:构件是可以更换的部件,并且这个部件是由一系列很小的部件组成,同样这些小的部件由更小的部件组成;我为什么要区分插件与构件主要原因是这两个名字所表达的思想不同。插件是可插、可卸的过程,没有强调无限极的递归实现子插件的意思,所以本人将其区分开来;当然也可以将这两种架构用同一名词描述,其实是大同小异了。下面我给大家带来怎么用这种设计思路来开发具体的系统。[王清培版权所有,转载请给出署名] 一:问题分析 阅读全文
.NET简谈——跨进高级编程门槛的必经之路
2011-07-08 17:14 by 南京.王清培, 3350 visits, 网摘, 收藏, 编辑摘要:我们继续C#基础知识的学习,这篇文章对前面基础知识学习的朋友有着举足轻重的作用;为了延续基础知识学习的热情,我编写了这篇特殊的文章。 本篇文章的中心是想借“.NET简谈反射(动态调用)”一文继续发挥下去,让朋友能一气呵成,到底反射能用在什么地方,究竟能起到多么高级的作用。 下面我就拿具体的例子讲解,不废话了请随我来; 1:必须具备的基础知识 C#接口:要想用反射进行高深的使用,必须先具备接口方面的基础,只有用接口了才能是系统真真的活起来。参考.NET简谈接口 一文; C#委托、事件:在动态调用的过 阅读全文
.NET简谈反射(动态调用)
2011-07-08 14:41 by 南京.王清培, 2182 visits, 网摘, 收藏, 编辑摘要:我们继续C#基础知识的学习,这篇文章主要要讲的是我们C#程序员迈向高级C#程序员的关键性的一步。 有的朋友会说事实不是这样的,我不用反射就不能开发吗?当然可以,但是用与不用肯定是不一样的,任何复杂抽象的分层架构或者说是复杂的设计模式均是建立在这些基础之上的,比如我们要进行模块化、组件化开发,要严格的消除模块之间的耦合,要进行动态接口调用。这样的强大而灵活的系统开发,必须要用反射才行;任何技术都有它存在的价值和意义,只要我们把它用在合适的位置就能发挥出惊人的力量;能尽可能的减少我们编写的代码,更能是我们的代码便的清晰简洁; 下面我们就来学习C#中的反射的概念以及怎么使用它,用它能为我们提供什么样的好处,更重要的是能否将我们的技术台阶提升一个高度; 阅读全文
.NET简谈特性(代码属性)
2011-07-07 19:23 by 南京.王清培, 1694 visits, 网摘, 收藏, 编辑摘要:由于很久没有写关于基础知识的东西了,今天来总结一下关于.NET平台中的代码属性的概念;只是基础介绍,文章的本意是带领初学者学会使用特性,而不是讨论高深的底层技术;[王清培版权所有,转载请给出署名] 1.什么叫特性Attribute 特性对一般.NET编程人员来说并不陌生,自从我们开始接触C#语言的时候,我们多多少少已经接触了关于特性的使用;但是对于初学者来说真的不明白特性的意义,特性到底是属于类还是类实例,这些概念搞不清楚对理解代码的逻辑真的很顺利;这篇文章我将带您来了解特性的作用,其实特性的真的很方便;至少我认为自从我懂特性之后,我的代码便的更加的人性化,程序的结构清晰易懂,所以本人在写代码的时候经常喜欢用一些能够简单明了的表达对象的特点的风格; 其实特性Attribute就是一段代码..... 阅读全文
.NET简谈互操作(七:数据封送之介绍)
2011-07-05 13:15 by 南京.王清培, 1477 visits, 网摘, 收藏, 编辑摘要:我们继续.NET互操作学习。互操作的基础知识已经差不多完了,当然一篇小小的文章很难全面的讲述互操作的方方面面,本人只是总结出关键的地方好让我们能入个门,在后期如果想要更深入的学习,肯定需要一本详细而全面的书籍才行。想要精通.NET互操作当然也少不了对非托管的技术学习,C++、COM等等,只有既熟悉.NET也熟悉非托管技术才能将互操作融会贯通。从这篇文章起我们将进入到.NET互操作的数据封送阶段,数据封送是.NET/Pinvoke关键的部分,任何托管代码想要和非托管代码互操作,少不了数据的传递返回.. 阅读全文
每个软件企业是否应该有属于自己的开发平台
2011-07-04 18:34 by 南京.王清培, 2385 visits, 网摘, 收藏, 编辑摘要:由于本人最近一段时间一直在忙着跟企业开发平台相关的事情,所以有感而发一下;主要是想跟大家探讨一下企业是否需要有自己的开发平台; 我们作为.NET程序员,基本上开发的都是一些业务信息系统,都是某个应用行业的应用系统多,所以在下曾想过开发一套目前本公司能用的系统开发平台; 其实本人认为有这个必要,我大概说一下我的看法,也好给大家提个思考的方向;[王清培版权所有,转载请给出署名] 本公司是从事医药行业的信息系统开发,一些大的业务模型基本上已经固定,很少有改动;所以本人想是否能将主要的业务逻辑抽象出来进行封装;再加上我们公司的人员流动比较快,新来的员工对业务的不熟很难上手开发,所以公司经常组织新员工的培训,但是效果还不明显;公司的业务系统所处理的都是全国所有的药品交易数据,所以数据非常重要不能出现任何的小差错;但是还是有因为业务逻辑的不熟导致程序出现错误; 阅读全文
.NET简谈互操作(六:基础知识之提升平台调用性能)
2011-07-02 22:38 by 南京.王清培, 1140 visits, 网摘, 收藏, 编辑摘要:我们继续.NET互操作学习。本篇文章我们将来学习互操作基础知识中的最后一个知识点“提升平台调用的性能”; 在于非托管函数进行互操作的过程中,由于涉及的技术因数众多,因此程序的性能会受到这些因素的影响导致性能下降,本篇文章将来介绍在平台调用过程中提升性能的一些设计和编码方面的技巧;[王清培版权所有,转载请给出署名] 一:显示的制定要调用的非托管函数名称 我们在进行平台调用的时候,如果CLR无法在非托管DLL中找到与DllImport特性指定的函数名相同的非托管函数,那么CLR会尝试采用一些规则重新进行搜索。比如我们将sumA非托管函数的CharSet申明为CharSet.Ansi,那么CLR首先会通过根函数名(sum)进行搜索,如果在指定的非托管DLL中找到了此函数,就是用它。如果不能找到,就会使用带后缀A的函数(sumA)进..... 阅读全文