摘要: 用于在.NET下快速开发控制台应用程序的Adaptive Console Framework框架再次有了新的版本(版本号:3.5.3286.17617)。有兴趣的朋友可以点击这里直接下载安装包使用。与上一个版本(版本号:3.5.3253.15384)相比,最新版具有如下几个更新:将框架DLL、演示程序和文档分别打包发布,允许用户根据自己的需要下载ACF的相关组件。针对初级用户提供了InstallS... 阅读全文
posted @ 2009-03-08 11:31 dax.net 阅读(357) 评论(0) 推荐(0) 编辑
摘要: 最近在看一些.NET Ajax的东西,发现一个小问题,就是当我在将TextBox的ReadOnly属性设置为true的时候,使用CalendarExtender后无法获得TextBox.Text的值。 在选择日期的时候,不允许用户修改TextBox里的值,这是比较常见的一种做法,目的是不希望再对用户的输入做进一步的格式验证。请看下面的代码:view plaincopy to clipboardpr... 阅读全文
posted @ 2009-03-06 15:06 dax.net 阅读(1080) 评论(0) 推荐(1) 编辑
摘要: 在软件系统的整个开发过程中,需求分析是非常重要的一个环节,这一点大家都知道,这句话估计很多人都能脱口而出;然而在实际应用中,却往往容易被人忽视。为什么会出现这种情况呢?我想这也是可以理解的。理论毕竟是理论,与实际应用会有所偏差。比如一些外包项目,由于时间的紧迫,团队必须在较短的时间里做出最快速的反应,如此一来,诸如需求分析、文档管理等过程就会出现混乱,甚至是“避而不谈”,等... 阅读全文
posted @ 2009-03-06 14:12 dax.net 阅读(567) 评论(0) 推荐(0) 编辑
摘要: 从本文开始,将会有一系列的文章介绍领域驱动设计在.NET中的实践,并探讨在.NET环境中实践领域驱动设计的最佳操作。领域驱动设计是一种新兴的软件设计思想,它不是理论,不是圣经,而是前辈多年来实践经验的总结。与模型驱动相比,领域驱动更关注领域,在架构大型软件系统方面,领域驱动设计更具有指导意义。 Eric Evans在他所写的《领域驱动设计:软件核心复杂性应对之道》一书中,详细地介绍了与领域驱动设计... 阅读全文
posted @ 2009-03-05 10:16 dax.net 阅读(738) 评论(0) 推荐(0) 编辑
摘要: 前段时间在网上看到了一款在WLW中插入语法高亮代码的插件,叫做Highlight4Writer,试用了一下,能够完成基本功能,但有一些不尽人意的缺点:1、插入的代码行间距太大,看起来不舒服,一页只能显示少量代码;2、支持的程序语言有限,无法自己定制;3、语言语法高亮颜色无法自己定制;4、无法显示行号。针对这些问题,我借用SyntaxBox的支持,自己开发了一款在WLW中插入语法高亮代码的插件。 下... 阅读全文
posted @ 2009-02-14 14:34 dax.net 阅读(654) 评论(0) 推荐(0) 编辑
摘要: 在一个星期不到的时间里,空闲之余仍然摆弄着Visual Studio 2008,反正一直都在感叹Visual Studio的强大功能,也一直在考虑一些有关用.NET构造大型企业级应用的基础问题。今天,暂且不提什么大型企业级应用,这也不是短时间能够思考清楚的,先拿Visual Studio 2008做些小东西,为Windows Live Writer开发一个插入计算结果的插件吧。 在我们平时写博客的... 阅读全文
posted @ 2009-02-12 08:16 dax.net 阅读(324) 评论(0) 推荐(0) 编辑
摘要: IoC/DI(Inverse of Control/Dependency Injection,控制反转/依赖注入)模式是一种企业级架构模式,通过将应用程序控制权反转交移给框架,并以构造器注入、属性设置器注入等方式将类实体注入到特定应用层中,最终实现层与层之间的解耦,使得应用程序获得良好的扩展性和应变能力。 客户需求如下:需要向系统中添加两个窗体,Engineers和Analysts,分别显示工程师... 阅读全文
posted @ 2009-02-07 21:31 dax.net 阅读(748) 评论(0) 推荐(0) 编辑
摘要: 很多IT行业的读者,如果有过一些面试经验的,都会被问到一个经典问题:什么是类库?什么是框架?两者有什么关系?我语文不好,要我用一句话去概括这个问题,恐怕也有点难度。就在此多花点笔墨,多写几句吧。类库 首先要谈到面向对象。为什么要面向对象?因为对象与其之间的关系能够客观地描述现实生活中的事物及其之间的关系。现实生活中的事物有如下特点:不同种类的事物,有着不同的属性,也有不同的行为。各种类的事物之间、... 阅读全文
posted @ 2009-02-07 20:43 dax.net 阅读(682) 评论(0) 推荐(1) 编辑
摘要: 实际开发过程中,一对多(1:n)的对象关系是非常常见的,比如销售订单(Sales order)下可以有多条订单行(Sales lines),这种关系可以直接使用数据库提供的主/从表关联关系实现。面向对象分析与设计思想并不提倡将数据库作为整个模块甚至系统设计的主要对象。例如,在处理多对多的对象关系时,数据库的简单关联就显得有点力不从心了。在这种情况下,设计人员不得不增加新的数据表,以便将多对多的关系... 阅读全文
posted @ 2009-02-06 15:10 dax.net 阅读(1040) 评论(0) 推荐(0) 编辑
摘要: 在上图中(点击查看大图),BrushBase的GetColor 是一个虚函数,为了提高封装性,我们在此将其定义为受保护成员(Protected)。GetColor 函数的实现部分被摆放在了BrushBase 的子类中,而BrushBase本身却用到了这个虚函数。在模板方法模式中,将GetColor 方法的实现称为延迟实现(Late Implementation),而将调用该方法的方法(BrushB... 阅读全文
posted @ 2009-02-06 15:07 dax.net 阅读(771) 评论(0) 推荐(0) 编辑
摘要: 上文已经提到接口的基本知识,以及如何从面向对象的角度去认知接口与抽象类的联系和区别。本文将从另外的一些技术角度来继续讨论接口和抽象类的取舍问题。首先,在C#中,一个类仅可以继承于一个基类(可以是抽象类,也可以是普通的非密封类),但是它可以实现多个接口。因此,当某个类需要同时拥有多种不同的操作时,封装这些操作的类型就不得不被定义为接口。例如,“学生”实体本身可以根据年龄来比较... 阅读全文
posted @ 2009-02-06 14:55 dax.net 阅读(559) 评论(1) 推荐(0) 编辑
摘要: 为了将问题描述清楚,我们先来看一个例子。在这个例子中,WinForm上有一个按钮,当用户点击这个按钮后,就会装载一个已经存在的Assembly,并且在界面的Label控件上显示出这个Assembly的FullName。对Reflection稍微熟悉一点的朋友都知道,这是非常简单的事情,只需要用Assembly.LoadFile方法获得Assembly,然后用FullName属性来显示即可,比如下面... 阅读全文
posted @ 2009-01-12 10:55 dax.net 阅读(1860) 评论(1) 推荐(0) 编辑
摘要: 经过一个多月的努力,用于在.NET下开发控制台程序的框架ACF终于有了新的版本。ACF简化了.NET下具有复杂命令行语法的控制台程序的开发过程,不仅使得控制台程序具备可测试性,而且开发人员还能够非常方便地向控制台程序发布新的命令行语法。本次版本更新涉及到了下面几个方面:性能优化支持多个“契约仓储(Contract Repository)”,以使得控制台程序有着良好的扩展性支... 阅读全文
posted @ 2008-12-19 14:17 dax.net 阅读(496) 评论(0) 推荐(0) 编辑
摘要: 原本我一直是使用Windows Live Writer(WLW)在自己的英文博客上发布文章,在将博客换成中文的PJBLOG后,我也就没有再使用WLW了。今天我重新打开了WLW,尝试着配置以便能够支持PJBLOG。结果发现,WLW确实能够很好的兼容PJBLOG,而且图片的发布也非常方便,这对于广大博友来说,无非是一个很好的消息,WLW也能够满足广大博友的写博需求。然而,对于我这个时不时会在博客中加入... 阅读全文
posted @ 2008-12-15 10:54 dax.net 阅读(473) 评论(0) 推荐(0) 编辑
摘要: 事件定义的时候,可以使用add和remove关键字来自定义事件处理函数的添加与移除功能。例如,可以在添加和移除之前,使用lock关键字实现线程同步。虽然MethodImplAttribute会用当前类的对象作为同步对象实现线程同步,但当对象需要向外界公布多个事件的时候,这样做会产生效率问题。比如:对象A向外界公布了E1、E2两个事件,订阅方O1使用+=运算符试图订阅E1事件;订阅方O2也使用+=运... 阅读全文
posted @ 2008-12-11 11:31 dax.net 阅读(743) 评论(0) 推荐(0) 编辑
摘要: 在此把平时经常去的学习C#和.NET的地址链接整理一下,当然也还包括其它不错的站点,也会列举在此,以作必要时参考(不断更新中)。CodeProject:http://www.codeproject.com,不仅仅是学习C#/.NET,它还包括了诸如C++、COM等其它技术的内容CodePlex:http://www.codeplex.com,MS支持的开源网站,有N多源代码可供下载或参考。本人写的... 阅读全文
posted @ 2008-12-02 15:41 dax.net 阅读(733) 评论(0) 推荐(1) 编辑
摘要: 上个礼拜收到了CCSE(全国软件工程大会暨系统分析员年会)组委会给我寄来的CCSE2008论文集:《计算机工程与应用》特刊。其中包括了我发表的一篇论文,题目是《领域驱动设计的研究与实践》。在这篇论文中,我以一个实际项目为例,简要地阐述了领域驱动设计(Domain Driven Design,简称DDD,下同)的基本理论及其在软件项目中的应用。由于篇幅有限,刊登出来的论文只能介绍个大概,事实上我应该... 阅读全文
posted @ 2008-12-01 11:04 dax.net 阅读(596) 评论(0) 推荐(0) 编辑
摘要: 在讨论事件订阅之前,我们先来看看委托的另一个特性,即调用列表(invocation list)。对于某个特定的委托而言,我们既可以将其它的委托加入其调用列表中,也可以从其调用列表中将其它的委托移除。那么当程序使用这个委托的时候,就会循环遍历并执行其调用列表中的所有委托。下面请看一个例子,在这个例子中,我们定义了一个委托Callback,并将指代两个函数Func1和Func2的委托依次加入其调用列表... 阅读全文
posted @ 2008-12-01 10:20 dax.net 阅读(631) 评论(0) 推荐(0) 编辑
摘要: ACF(Adaptive Console Framework)是一款.NET下的控制台程序开发框架。控制台程序不是非常简单吗?还需要开发框架干什么?当你回答完下面的问题以后,你就会发现,原来自己也需要一套合理的控制台程序的开发方案。控制台程序都提供命令行参数以及参数值,是否每次开发的时候,都需要去解析用户给定的参数?如果控制台程序需要提供多种参数组合,那么要针对每种参数组合开发一套解析机制,是否感... 阅读全文
posted @ 2008-11-27 16:25 dax.net 阅读(1198) 评论(0) 推荐(0) 编辑
摘要: 上篇文章介绍了C#中事件的基本实现方式,在本文中,将对最常见的事件委托EventHandler和EventHandler<T>做介绍。事实上,在前面文章的介绍中,已经涉及到了EventHandler和EventHandler<T>。在C# 2.0泛型出现之前,EventHandler对C#中最常见的事件处理函数进行了签名定义,它指代了这样一些函数,这些函数没有返回值,有两个... 阅读全文
posted @ 2008-11-24 20:21 dax.net 阅读(6242) 评论(0) 推荐(0) 编辑