设计模式系列-适配器模式
一、上篇回顾
通过上篇的简单讲解,我们知道了,组合模式意图是通过整体与局部之间的关系,通过树形结构的形式进行组织复杂对象,屏蔽对象内部的细节,对
外展现统一的方式来操作对象,是我们处理更复杂对象的一个手段和方式。本文以查询控件为例,说明了,查询控件内部的组成元素,及如何操作内部的组
成元素,包括添加元素,删除和处理相应事件的Handler,当然组合模式的作用远比这些强大,后面我们肯定会在一些实例代码中运用到组合模式的。组合
模式如果在条件允许的情况下,我们尽量使用组合模式来处理复杂对象,远比通过继承出来的对象来的有效。
组合模式-强调的是如何组织整体和局部之间的结构,将整体和局部之间的关系,通过树形这样的结构来组织这种
http://cyqdata.cn/cnblogs/article-detail-255
WPF企业内训全程实录(下)
摘要
WPF企业内训全程实录由于文章比较长,所以一共拆分成了三篇,上篇WPF企业内训全程实录(上)主要讲了基础,中篇WPF企业内训全程实录(中)主要讲解开发模式、团队协作及应用框架,起着承上启下的作用,主要讲解开发模式、团队协作及应用框架。这篇作为该实录的下篇——终结篇,起着总结的作用,主要讲解其他技术的引用、WPF项目及性能优化、部署与更新等议题。
其实如果大家仔细看目录,可以发现我安排的顺序是首先讲解最基本的概念和基础内容、然后过渡到开发模式及框架、最后结合其他技术和项目实际运用,这也是学习并应用一门技术最好的流程。上篇实际上主要有两个侧重点:一则就是理清脉络——历史渊源、概念引入及基本阐述;二则是讲解WPFBasic——主要细究WPF的每个知识点,基本涵盖了WPF的方方面面;如果大家感兴趣,可以下载代码并
http://cyqdata.cn/cnblogs/article-detail-254
微软企业库(1):Enterprise Library 5.0介绍
Microsoft Enterprise Library 5.0 – 2010四月
patterns & practices Developer Center
【1】摘要
PP小组2010年4月发布了企业库5.0,这是MSDN企业库5.0主页英文版的翻译。译者:Frank Xu Lei
微软企业库是一系列应用程序块的集合,目标是帮助开发人员来处理常见的企业应用开发遇到的挑战。应用模块是作为指南,提供的代码开发人员可以在企业项目里用作扩展或修改使用。
【1.1】下载:
Microsoft Enterprise Library 5.0
Microsoft Enterprise Library 5.0 Documentation
【1.2】发布指南:
Release Notes
【1.3】类库:
Enterprise Library 5.0 Class Library o
http://cyqdata.cn/cnblogs/article-detail-253
.Net 4.0 之 Dynamic 动态类型
本文主要旨在与网友分享.Net4.0的Dynamic 对Duck Type 的支持。
一、.net4.0主要新特性
.Net4.0在.Net3.5基础上新增的主要特性有:可选参数、命名参数和Dynamic。具体请阅生鱼片的这篇博文。这里我们着重讲解C#4.0的Dynamic特性,对于其他特性大家可以在VS2010内尝试一下。总之.Net在不断进步中。
二、ExpandoObject普通应用
ExpandoObject 类,&
http://cyqdata.cn/cnblogs/article-detail-251
使用Repository模式支持产品的客户化
本篇博客简单描述了Repository模式在OEA中的应用。 不使用Repository时的问题 OEA框架中使用了DDD的思想,面向领域对象进行开发。在DDD中,有很多重要的概念,例如:聚合实体对象、值对象、仓储、工厂、服务等。(不太了解的Repository和DDD的朋友,可以看Evans写的《Domain Driven Design》。) 在OEA中,实体的实现框架使用了CSLA分布式框架。原来为了简单并保持和CSLA开发模式的兼容,一直都把实体的获取模式直接以静态方法的方式直接写在实体的对应列表类中。例如下面这段代码: 随着应用的慢慢深入,出现了一些问题: 不易支持客户化。OEA是基于产品线的开发,如果采用前面的开发模式,
http://cyqdata.cn/cnblogs/article-detail-250
CRM2011实体介绍(二)
会计日历类实体Fiscal Calendar以及销售区域实体Territory: 这两个实体用于跟踪销售人员的销售信息。 销售人员就是系统中的系统用户SystemUser,而每个销售员都有其销售目标与任务,而Fiscal Calendar定义了每个销售员的销售配额。所谓的销售配额sales quota,就是在一定的财务阶段内,按照某个货币单位,必须完成的利润额度。Fiscal Calendar就是定义了会计年度,即用于计算组织内会计活动的时间跨度。每个财年将会分解为多个财务区间,例如被分解为半年、季度、月等等。会计日历实体包括有AnnualFiscalCalendar、 FixedMonthlyFiscalCalendar,、MonthlyFiscalCalendar、QuarterlyFiscalCalendar, 以及 SemiAnnualFiscalCalendar,分别对应了年、固
http://cyqdata.cn/cnblogs/article-detail-249
Silverlight MMORPG网页游戏开发课程[一期] 第十三课:战斗系统之技能/魔法攻击
引言
游戏因为华丽而精彩!这是所有游戏开发者发自肺腑的不懈追求!绚丽的技能/魔法效果将游戏的内涵渲染得淋漓尽致,本节我将继续拓展游戏中的战斗系统,以最简单直接的方式实现超酷的技能/魔法攻击效果。
13.1战斗系统之技能/魔法攻击(交叉参考:大法师 - 华丽经典之轮回 超酷万变的矢量魔法 雷、混、冰、毒、火、风 - 幻化中的魔法魅力!锦上添花之魔法特效装饰 落雷!治疗!陷阱!连锁闪电!多段群伤!魔法之终极五重奏① 落雷!治疗!陷阱!连锁闪电!多段群伤!魔法之终极五重奏② )
传统即时类RPG游戏通常以右键作为技能/魔法的触发,战士类职业以技能为主,法师类职业以魔法为主,区别在于近身与远距离之分。这样我们大致可将其进行如下归类:近/远距离单体/群体技能攻击、近/远距离单体/群体魔法攻击;其中的单体又可分为速效型、持续型或按受益性质化分
http://cyqdata.cn/cnblogs/article-detail-248
数据库性能优化总结
对于web应用开发,多数性能瓶颈均出现在数据库上,除了采用分布式架构或云处理(大公司基本上都是),更重要的是平时程序设计时要遵照一些规则,从根本上提高系统的性能,以下总结了一些常用的规则方法,仅供参考,欢迎跟帖补充。。。
1、 把数据、日志、索引放到不同的I/O设备上,增加读取速度。数据量(尺寸)越大,提高I/O越重要。
2、 纵向、横向分割表,减少表的尺寸,如:可以把大数据量的字段拆分表。
3、 根据查询条件,建立索引,优化索引、优化访问方式,限制结果集的数据量。注意填充因子要适当(最好是使用默认值0)。索引应该尽量小,尽量使用字节数小的列建索引,不要对有限的几个值的列建单一索引。
4、 用OR的字句可以分解成多个查询,并且通过UNION链接多个查询。它们的速度只与是否使用索引有关,如果查询需要用到联合索引,用UNIO
http://cyqdata.cn/cnblogs/article-detail-247
Silverlight DataGrid使用WCF RIA Service实现Load-on-demand的数据加载
在Windows或者ASP.NET Web应用程序中,我们经常可以看到在Grid控件上通过Load-on-demand的方式来提高系统性能,提升用户体验。 所谓Load-on-demand就是在最初表格数据加载时只加载当前表格中用户可以看到的行数,当用户向下滚动或拖拽纵向滚动条时,再将需要显示的数据通过某种方式动态加载进来。 那么对于Silverlight,我们可以使用DataGrid通过WCF RIA Service来实现这个功能。 1. WCF RIA Service 我们将会使用WCF Service来提供数据,并且将这个WCF Service host到ASP.Net应用程序中。 - 定义数据对象 [DataCont
http://cyqdata.cn/cnblogs/article-detail-246
WPF自定义ListBox(二)
Helloj2ee的自定义ListBox(一),虽然很用心,但看出来反响不强烈。只能这一篇再给力一点。虽然评论很少,但是也看出一些讯息。
讯息之一,就是Helloj2ee的WPF看不懂。的确在这里写的不是基本的东西,而是对其WPF的相关基础概念掌握了之后,才能看的一个系列。自定义控件在《葵花宝典——WPF自学手册》一书中,是放到第六卷——华山之巅,足见其高阶。因此Helloj2ee在后面列出的参考文献,就很有价值了。因为您若是看不懂,不妨去参考相关文献,即便您没有葵花宝典一书,但总可以知道需要掌握的相关概念是什么,参阅其他书又何妨?
讯息之二,是提供的源码无法打开,那么Helloj2ee已经更新过。如果解压还是失败,您不妨在下面的回帖中告诉我。
说到给力,那么只有让这个控件在本章当中酷起来或者炫起来,才是给力的王道。
Circu
http://cyqdata.cn/cnblogs/article-detail-245
需求驱动学习之Python(如何编写Python脚本替换文件中的多行字符?)
当一个人太执着于某一个东西的时候,
会错过很多美好的东西!
Python值得学习的一个工具,不要局限在当前使用的语言中。
在大概3个月之前,Python对我来说一直是个迷。然而,就在3个月前我经理给我一个任务——删除(替换)所有项目源码文件中包含特定几行内容的所有注释。整个项目源码的大小有1G,在Linux服务器(中高档)上编译需要半个多小时,可见代码量之大,不可能手动去一个一个改。肯定得用脚本去处理,于是我想到了Python。在这之前没有接触过Python,花了2个星期一顿恶补之后,总算顺利交差了。
一直很想和大家分享一下碰到的问题及我如何解决的(可能我的方案并不好,但是他能够解决我的问题),但一直拖到现在是因为我感觉我还对Python的了解还不够。因为要在短时间内完成上面交下来的任务,在学习Python的时候,都是走马观花,对解决自己的问题不相关的直接跳过,看资
http://cyqdata.cn/cnblogs/article-detail-244
Oracle VM VirtualBox上安装windows server2008R2做SharePointServer2010开发(中)
非常遗憾,在我本子上没能装上,在windows更新上出现错误,没有找到原因,猜想是因为没有激活windows,等有时间再将本上的开发环境搞定。 由于公司开发需要,在公司的服务器上做了虚拟机器安装了Server2008R2,和SharepointFoundation2010及VS2010进行开发。 在安装完成Server2008R2后,需要配置一下应用程序配置才能继续安装SharepointFoundation2010,在安装时有几个需要注意的地方, 如果仅仅是在虚拟机上做开发,可以直接独立安装,如果有其他服务器的话,选择服务器场。 看到下面的图就说明安装基本完成了,接下来我们会做一个常用的webpart开发。 我们新建一个网站试试 配置站点 在你创建一个网站之后,如果想在根站点下再建立一个站点,那么创建界面就会是另外的样式 创建完毕后,在跟站点下
http://cyqdata.cn/cnblogs/article-detail-243
基于事件通信的轻量级MVP框架实现,附源码
在.NET中,对于ASP.NET,有MVC;对于WPF、SILVERLIGHT,有MVVM。然而在桌面开发领域,似乎微软并没有推出什么强力的框架。但笔者在写程序的时候很不喜欢把代码全部混杂在一个类中。这个问题很容易解决,一种是使用现成的对平台没有依赖性的MVC框架,比如PureMVC,当然学习一个框架需要一些时间,另一种方法就是自己做一个小框架,恐怕称之为框架都有些太夸大了。
首先需要确定的是这个小框架要实现的功能。MVC虽然经典,但是View层的数据获取需要从Model直接获取,而View的操作行为则是需要通过Controller来更新Model。也就是说在View与Model通信过程中,Controller负责那些变更状态的事情。然而MVC中比较严重的问题是View需要引用Model,这就
http://cyqdata.cn/cnblogs/article-detail-242
使用匿名委托,Lambda简化多线程代码
.net中的线程也接触不少了。在多线程中最常见的应用莫过于有一个耗时的操作需要放到线程中去操作,而在这个线程中我们需要更新UI,这个时候就要创建一个委托了来更新UI了,不然会报错的。下面我们就来设计一个简单的场景:窗体上有一个按钮和进度条,按钮按下后启动一个线程让进度条滚动。需要说明一下的是,我们这里不讨论使用匿名委托,lambda的好坏,我们只有一个目标就是使得我们的程序:短点,短点,再短点。 最“朴素”写法 我刚开始没有掌握匿名方法这些就是按照下面这些写的,说实话很痛苦。后来接触了匿名表达式,lambda后几乎都不想再想写这样的东西了,除非特殊的一些情况,比如需要自己定义委托。如果您现在还在按照下面这样写,那么这篇文章对你或许有
http://cyqdata.cn/cnblogs/article-detail-241
《NewBluePill深入硬件虚拟机》- 新书预览
一、 概述 在这一章中,我们先介绍一些贯穿全书的概念,比如Hypervisor,VT-x,VT-d,SVM等等。然后我们会简略介绍下NewBluePill项目背景及其所采用的硬件虚拟化技术。 这一章只是介绍这些技术大致的轮廓,详细内容会在后面各章节中逐一介绍。 虚拟化技术概述 虚拟化的历史 在讨论Hypervisor之前首先谈谈虚拟,虚拟(virtualization)指对计算机资源的抽象,一种常用的定义是“虚拟就是这样的一种技术,它隐藏掉了系统,应用和终端用户赖以交互的计算机资源的物理性的一面,最常做的方法就是把单一的物理资源转化为多个逻辑资源,当然也可以把多个物理资源转化为一个逻辑资源(这在存储设备和服务器上很常见)” 实际上,虚拟技术早在20世纪60年代就已出现,最早由IBM提出,并且应用于计算技术的许多领域,模拟的对象也多种多样,从整台主机到一个组件,其实打
http://cyqdata.cn/cnblogs/article-detail-240
方法的长度
《重构之美》之三 我曾经在一次演讲中,问过听众这样一个问题:“一个方法的理想行数最多不超过多少行?”如果问一千个人,或许会有一千条答案吧。 这是一个见仁见智的问题。在《软件开发沉思录》一书中,ThoughtWorks的技术负责人Jeff Bay认为:“一个常见的原则是将方法的行数控制在5行之内……”很多人对此感到不可思议。窃以为,关键不在于方法的最大行数,而是要合理理解方法的微粒度能为我们带来什么好处? Jeff Bay提倡“利用IDE提供的‘提取方法’功能,不断地提取方法中的行为,直到它只有一级缩进为止。如果方法过长,不可能达到如此清晰的可读性。”Robert C. Martin则强调:“方法的第一规则是要短小。第二条规则还要更短小。” 短小的方法更容易理解,更容易重用。这一点毋庸置疑。不过,短小的方法会导致方法数量的急剧
http://cyqdata.cn/cnblogs/article-detail-239
JavaScript(JS) 压缩 / 混淆 / 格式化(美化) 工具算是完美了。
我是对javascript有特殊情结的…… (被人各种各样的鄙视)
奈何对javascript本身水平不够的,
可是我那么热爱js所以就想在前人的基础上制作一个功能武装到牙齿的js在线工具应该还是可以的吧。
也给自己方便,于是这个工具就诞生了。
http://jscompress.sinaapp.com/
本工具是在线版工具,有以下的功能.好不好请大家验证一下吧。
本工具是基于新浪云计算开发的,应该是很稳定的~~
压缩 (可选)
js minify (默认的压缩,只会清除注视空行空格,不替换变量语法。)
yui compressor (这个应该是目前世界上最好的压缩机了吧?姑且这么认为。)
Google Closure Compiler (google 使用的JS压缩机,而且还能优
http://cyqdata.cn/cnblogs/article-detail-238
[EntLib]微软企业库5.0 学习之路——第十步、使用Unity解耦你的系统—PART4——Unity&PIAB
在前面几篇有关Unity学习的文章中,我对Unity的一些常用功能进行介绍,包括:Unity的基本知识、管理对象之间的关系、生命周期、依赖注入等,今天则是要介绍Unity的另外一个重要功能——拦截(Interception)。
以下是本文所要介绍的内容:
1、Unity与PIAB的关系。
2、使用Unity来接管PIAB的功能实现。
一、Unity与PIAB的关系
Unity中的Interception可以通过Unity的Container或独立的API(Intercept)来实现,这些具体的实现没有包含在Unity本身的类库中,而独立放在Unity.Interception这个类库中,想深入了解的朋友可以查看下这个类的具体源
http://cyqdata.cn/cnblogs/article-detail-237
VS2010实践RUP4+1架构模型
RUP4+1架构方法
RUP4+1架构方法采用用例驱动,在软件生命周期的各个阶段对软件进行建模,从不同视角对系统进行解读,从而形成统一软件过程架构描述.
图 1. RUP4+1架构图
用例视图(Use Cases View),最初称为场景视图,关注最终用户需求,为整个技术架构的上线文环境.通常用UML用例图和活动图描述。
逻辑视图(Logical view),主要整个系统的抽象结构表述主要关注系统提供最终用户的功能,不涉及具体的编译即输出和部署,通常在UML中用类图,交互图,时序图来表述,类似与我们采用OOA的对象模型。
开发视图(Development Vi
http://cyqdata.cn/cnblogs/article-detail-235
MonoDevelop/MonoTouch SDK开发iOS程序体验!
作者:不及格的程序员-八神
首先从http://monotouch.net/官网下载了三个必须的安装文件 Mono for mac 框架,这个大约70M大小,再下载MonoDevelop,这个开发IDE大概10多M,最后下载了Monotouch SDK,这个大约22M.
之后就是一步步安装了很顺利,由于我的mac mini 装的是中文系统,当第一次打开MonoDevelop时,界面居然是乱码,文字全是方块,或是空字符.
后来在设置窗口中的User interface language设置成了英文,界面算是正常了.
乱码的界面:
正常的界面:
下面创建一个Hello World的程序吧.托一个按钮,给按钮加一个事件委托,真的是非常简单.而且根本不用管理对象释放的问题,而且代码的智能提示要比xCode提高一个档次,有点类似VS2010.
工程类型选择:
代码:
默认情况
http://cyqdata.cn/cnblogs/article-detail-234