架构深渊

慢慢走进程序的深渊……关注领域驱动设计、测试驱动开发、设计模式、企业应用架构模式……积累技术细节,以设计架构为宗。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

10 2008 档案

摘要:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 2008年03月04日 星期二 15:14 2 效果图如下: 3 4 5 点“添加参与人”按钮可以添加一行,每行后面都有一个删除按钮,可以删除所在行,“清空”则删除所... 阅读全文

posted @ 2008-10-25 17:52 chen eric 阅读(306) 评论(0) 推荐(0)

摘要:我在前一篇文章里提到,对于停靠工具栏或者是视图最好是不要将实例放到词典中,而是将工具栏或者视图的类型放到词典中,因为视图类型会经常的被重用,并且会经常被关闭或者再打开。当实例被关闭后,资源就被释放了,对于实例的管理就会比较麻烦,所以我们分为两步走。在插件被加载的时候,我们只注册类型,在应用程序运行的时候,我们通过某种途径来实例化他。 我修改的以前的例子,主要突出本次演示的功能。这次的... 阅读全文

posted @ 2008-10-24 09:49 chen eric 阅读(224) 评论(0) 推荐(0)

摘要:既然做好了框架,我们就希望为某个目标服务,我们要提供一些基本的服务,方便用户继续扩展他的功能。首先想到的功能就是,菜单,工具栏的管理,接下来我们要实现一些更流行的功能,比如停靠工具栏等等。 如何实现这些服务呢?我们希望我们的插件在运行时可以获得应用程序本身的菜单,工具条,停靠工具栏等等,然后向他们添加项目,比如加入一个菜单项,添加一个工具栏按钮。为了在运行时获得某个菜单或者工具栏... 阅读全文

posted @ 2008-10-24 09:48 chen eric 阅读(237) 评论(0) 推荐(0)

摘要:前天发了构建插件式的应用程序框架(五)----管理插件这篇文章,有几个朋友在回复中希望了解插件之间是如何通讯的。 这个系列的文章写到这里,也该谈谈这个问题了,毕竟已经有了插件管理。不知道大家有没有注意到我在第四篇文章里谈到的服务容器(Service Container),Service是我所提到的插件式的应用程序框架的基础,我们也可以回头看看IApplication的接口定义,IApp... 阅读全文

posted @ 2008-10-24 09:48 chen eric 阅读(283) 评论(0) 推荐(0)

摘要:我们现在已经搭建了插件式的应用程序框架,接下来的工作就是要充实框架的内容,提供基本的服务,也就是Service。我想首要的任务就是提供插件的管理服务,我在前面的文章也提到了,要实现动态加载必须要知道插件寄宿在哪里,哪些要加载,哪些不加载,这些就是这篇文章要讨论的问题。 首先解决的就是插件放在什么地方,我采取的传统的方法,将插件放到应用程序所在目录下的制定目录,我会在应用程序所在的目... 阅读全文

posted @ 2008-10-24 09:47 chen eric 阅读(279) 评论(0) 推荐(0)

摘要:在构建插件式的应用程序框架(二)----订立契约一文中,可以看到我们的IApplication接口是派生于IServiceContainer接口的。为什么要派生于IServiceContainer呢?我们来看看IServiceContainer的定义,它有几个AddService方法和RemoveService方法以及从IserviceProvider继承过来的GetService方法。Ser... 阅读全文

posted @ 2008-10-24 09:46 chen eric 阅读(221) 评论(0) 推荐(0)

摘要:不管你采用什么方式实现插件式的应用程序框架,核心还是动态加载,换句话说,没有动态加载技术也就无所谓插件式的应用程序框架了。使用Com实现的话,你可以利用Com的API通过ProgID来动态创建COM对象,如果使用普通DLL,你需要使用Windows 的API函数LoadLibrary来动态加载DLL,并用GetProcAddress函数来获取函数的地址。而使用.NET技术的话,你需要使用Asse... 阅读全文

posted @ 2008-10-24 09:46 chen eric 阅读(235) 评论(0) 推荐(0)

摘要:无论是用COM的方式,还是普通DLL,抑或.NET方式来实现插件框架,首先要面临的问题就是如何订立契约。如同我上一篇文章讲到的一样,契约是应用程序和插件之间进行交互的依据和凭证。应用程序必须声明我有什么样的功能可被插件使用,并且插件必须符合什么条件才能被我使用。反之,插件必须要知道应用程序提供什么样的功能,我才能将自己的功能融入到应用程序的体系中。本系列文章主要讲如何使用.NET实现插件式的应... 阅读全文

posted @ 2008-10-24 09:45 chen eric 阅读(336) 评论(0) 推荐(0)

摘要:构建插件式的应用程序框架(一)----开篇 说起插件(plug-in)式的应用程序大家应该不陌生吧,记得很早以前有一款很流行的MP3播放软件winmap,它是我记忆里最早认识的一款使用插件模式的应用程序,你可以使用他的插件管理器插入很多的音乐效果器,皮肤,甚至是歌词显示的面板。接下来看到了Photoshop使用插件模式管理虑镜。最后发现只要是大一点的应用程序基本都使用了插件式的程序框... 阅读全文

posted @ 2008-10-24 09:44 chen eric 阅读(314) 评论(0) 推荐(0)

摘要:控件,在实现快速开发中起着非常重要的作用,它可以将某一特定功能封装起来,供可户程序员调用,更重要的是它还可以实现插件式开发,使软件的灵活性、可扩充性大大增强。在网络上,也有很多动态加载控件、动态调用类成员等的资料。下面,我就将动态加载控件总结一下,以供大家参考。(不过由于本人水平有限,不一定有参考价值,写出来一方面是为了总结自己,以求提高,另一方面也希望各为朋友看到我的不足,给我提出宝贵意见) 一... 阅读全文

posted @ 2008-10-24 09:43 chen eric 阅读(652) 评论(0) 推荐(0)

摘要:Enum的运算通常涉及到位运算(AND、OR、XOR),按位运算, 常使用FlagsAttribute 自定义属性定义。FlagsAttribute 和 Enum 的准则: 只有要对数值执行按位运算(AND、OR、XOR)时才对枚举使用 FlagsAttribute 自定义属性。 用 2 的幂(即 1、2、4、8 等)定义枚举常量。这意味着组合的枚举常量中的各个标志都不重叠。 请考虑为常用标... 阅读全文

posted @ 2008-10-19 22:40 chen eric 阅读(182) 评论(0) 推荐(0)

摘要:有时我们需要将枚举定义为1,2,4,8.......的值,这样当传入一个3,那么就是表示1,2的组合,如果传入7,那就表示1,2,4的组合。要实现这种功能我们需要用到FlagsAttribute。 有时我们需要将枚举定义为1,2,4,8.......的值,这样当传入一个3,那么就是表示1,2的组合,如果传入7,那就表示1,2,4的组合。要实现这种功能我们需要用到FlagsAttrib... 阅读全文

posted @ 2008-10-19 19:39 chen eric 阅读(1275) 评论(0) 推荐(0)

摘要:Code Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->我们经常需要设置这样一些标志位:比如对于模块我们分浏览、审核、修改、删除、冻结等不同的 权限,可能还有无权限和完全权限,这些权限可叠加,可能还要分级别。对于每个模块我们都要设 置一个用户... 阅读全文

posted @ 2008-10-19 19:36 chen eric 阅读(296) 评论(0) 推荐(0)

摘要:Enum的运算通常涉及到位运算(AND、OR、XOR),按位运算, 常使用FlagsAttribute 自定义属性定义。FlagsAttribute 和 Enum 的准则: 只有要对数值执行按位运算(AND、OR、XOR)时才对枚举使用 FlagsAttribute 自定义属性。 用 2 的幂(即 1、2、4、8 等)定义枚举常量。这意味着组合的枚举常量中的各个标志都不重叠。 请考虑为常用标... 阅读全文

posted @ 2008-10-19 19:26 chen eric 阅读(211) 评论(0) 推荐(0)

摘要:2008-08-22 15:14 楔子: 问题:假设一个文件中有9亿条不重复的9位整数,现在要求对这个文件进行排序。 一般解题思路: 1、将数据导入到内存中 2、将数据进行排序 (比如插入排序、快速排序) 3、将排序好的数据存入文件 ... 阅读全文

posted @ 2008-10-19 17:52 chen eric 阅读(332) 评论(0) 推荐(0)

摘要:C# 实现屏幕键盘 (ScreenKeyboard) 要实现一个屏幕键盘,需要监听所有键盘事件,无论窗体是否被激活。因此需要一个全局的钩子,也就 是系统范围的钩子。 什么是钩子(Hook) 钩子(Hook)是Windows提供的一种消息处理机制平台,是指在程序正常运行中接受信息之前预先 启动的函数,用来检查和修改传给该程序的信息,(钩子)实际上是一个处理消息的程序段,通 ... 阅读全文

posted @ 2008-10-19 14:13 chen eric 阅读(319) 评论(0) 推荐(0)

摘要:事件就是“当....的时候” 消息就是“嗨!你该干....了” 我们一般都是在 "当...的时候" 干 XXX0 或者 XXX1 XXX2 .... 也可以 “这件事情我不想理会”(让Windows去干)。 我们也可能在正干XXXn中突然想起: “嗨!我该晚餐了!” 再附上不经典的描述:事件是一个动作——用户触发的动作。 消息是一个信息——传递给系统的信息。 ... 阅读全文

posted @ 2008-10-19 12:01 chen eric 阅读(355) 评论(0) 推荐(0)

摘要:winuser.h 系统消息定义 /* * Window Messages */ #define WM_NULL 0x0000 #define WM_CREATE 0x0001 #define WM_DESTROY 0x0002 #define WM_MOV... 阅读全文

posted @ 2008-10-18 23:37 chen eric 阅读(2657) 评论(0) 推荐(0)

摘要:VB API SendMessage之wMsg (二) WM_MENUSELECT = $011F; 当用户选择一条菜单项时发送此消息给菜单的所有者(一般是窗口) WM_MENUCHAR = $0120; 当菜单已被激活用户按下了某个键(不同于加速键),发送此消息给菜单的所有者; WM_ENTERIDLE = $012... 阅读全文

posted @ 2008-10-18 22:48 chen eric 阅读(718) 评论(0) 推荐(0)

摘要:VB API SendMessage之wMsg (一) 2008年07月21日 星期一 下午 12:46 Sendmessage中wMsg,消息的标识符,有多少,具体是指什么? Sendmessage中wMsg其实就是一个windows可以识别的long型数,接收到wMsg之后,wind... 阅读全文

posted @ 2008-10-18 22:47 chen eric 阅读(1234) 评论(0) 推荐(0)

摘要:首先你得弄明白音频格式的几个参数。 在.wav格式中还是比较好理解的。 8位16位:使用多少个bit来描述一个采样点,1byte = 8bit,所以16位需要4个byte。 采样率:每秒钟采样多少次,即每秒生成多少个采样点。 声道数:以几个声道采样。 每秒数据流量:每秒钟生成的byte数 = 声道数 * 采样率 * 采样位数 / 8 了解了这些之后我建议你在C#中可以用DirectSound来采... 阅读全文

posted @ 2008-10-14 22:09 chen eric 阅读(2288) 评论(3) 推荐(0)

摘要:VB.NET快速操作图像 以反转一个图像为例子 慢速,这是以像素点操作为代表: Public Function fan_slow(ByVal inputImage As Image) As Image Dim pic As Bitmap = New Bitmap(inputImage) Dim i As Integer, j As Integer ... 阅读全文

posted @ 2008-10-14 22:07 chen eric 阅读(881) 评论(0) 推荐(0)

摘要:2007-11-26 11:38 将对象转为byte[] 通过socket来发送信息的时候,它只接受byte[]类型的参数,怎么样把一个对象转为byte[],之后将它通过socket发送呢? ... 阅读全文

posted @ 2008-10-14 21:44 chen eric 阅读(285) 评论(0) 推荐(0)

摘要:Web http://www.webappers.com/ - 一个很好的web资源网站,搜集了大量的学习资料和漂亮的例子,如图标,button,window等组件 Multibox Supports Images, Flash, Video, MP3 and HTML - 一个图片,flash等展示的Multibox,非常漂亮 http://www.icons... 阅读全文

posted @ 2008-10-14 20:55 chen eric 阅读(230) 评论(0) 推荐(0)

摘要:我是想做一个服务器程序接受客户端的登陆: 客户端连接服务器,序列化数据后传给服务器,服务器接收后反序列化 客户端序列化代码: public byte[] Serialize(object obj) { BinaryFormatter ... 阅读全文

posted @ 2008-10-14 20:39 chen eric 阅读(337) 评论(0) 推荐(0)

摘要:C#强化系列文章七:序列化和反序列化 序列化和反序列化我们可能经常会听到,其实通俗一点的解释,序列化就是把一个对象保存到一个文件或数据库字段中去,反序列化就是在适当的时候把这个文件再转化成原来的对象使用。 我想最主要的作用有: 1、在进程下次启动时读取上次保存的对象的信息 2、在不同的AppDomain或进程之间传递数据 3、在分布式应用系统中传递数据 ...... 在C#中常见的序列化的... 阅读全文

posted @ 2008-10-14 19:58 chen eric 阅读(257) 评论(0) 推荐(0)

摘要:在“通过HTTP状态码查看搜索引擎蜘蛛如何爬行你的网站”一文中,我介绍了一些经常涉及到的HTTP状态码及含义,譬如大家经常探讨并且与本文相关的Http状态码: 404:服务器找不到指定的资源,请求的网页不存在(譬如浏览器请求的网页被删除或者移位,但不排除日后该链接有效的可能性); 410:请求的网页不存在(注意:410表示永久性,而404表示临时性); 200:服务器成功返回请求的网页; 301... 阅读全文

posted @ 2008-10-13 16:26 chen eric 阅读(423) 评论(0) 推荐(0)

摘要:NAT详解 ... 阅读全文

posted @ 2008-10-12 17:56 chen eric 阅读(630) 评论(0) 推荐(0)

摘要:首选引用以下两个: using System.Net; using System.Net.Sockets; //获取机机IP地址: IPHostEntry ihe = Dns.GetHostByName(Dns.GetHostName()); IPAddress myself = ihe.AddressList[0]; //发送消息 UdpClient udpClient = new UdpCli... 阅读全文

posted @ 2008-10-12 17:18 chen eric 阅读(1120) 评论(0) 推荐(0)

摘要:Symmetric NAT与Cone NAT ... 阅读全文

posted @ 2008-10-12 16:41 chen eric 阅读(4023) 评论(0) 推荐(0)

摘要:穿越NAT的意义: NAT是为了节省IP地址而设计的,但它隐藏了内网机器的地址,“意外”起到了安全的作用。对外不可见,不透明的内部网络也与互联网的“公平”应用,“相互共享”的思想所不容,尤其是P2P网络中“相互服务”的宗旨,所以穿越NAT,让众多内部网络的机器也参与到P2P网络中的大集体中来,一直是P2P开发者的所希望的。穿越NAT需要借助外部的支持,说白了就是“内外勾结”,骗过NAT。很多P... 阅读全文

posted @ 2008-10-12 14:05 chen eric 阅读(1507) 评论(0) 推荐(0)

摘要:Stream的追加问题[C#](原) ... 阅读全文

posted @ 2008-10-09 21:08 chen eric 阅读(961) 评论(0) 推荐(0)

摘要:Stream的问题[C#](转) (2006-11-07 21:06:21) 分类:他山之石 前两天遇到了一个c#中文件的问题,幸得愚翁的文章指点,有点感悟,先将原文转过来,:) ------------------------------... 阅读全文

posted @ 2008-10-09 20:56 chen eric 阅读(1329) 评论(0) 推荐(0)

摘要:C#中操作Stream与Byte Array 2008-08-01 20:41 本文为frank的学习笔记,转载请注明原文链接 C#中结合Post发送的Stream与Byte Array的操作似乎资料很少.下面是我这几天的研究成果.功能是将同文件夹下的a.jpg复制生成b.jpg.代码如... 阅读全文

posted @ 2008-10-09 20:54 chen eric 阅读(1652) 评论(0) 推荐(0)

摘要:-------------------------------stream转string------------------------------- FileStream fstPreview = new FileStream(stPath, FileMode.Open, FileAccess.Read, FileShare.Read); ... 阅读全文

posted @ 2008-10-09 20:52 chen eric 阅读(6582) 评论(1) 推荐(0)

摘要:利用UrlRewrite,asp.net动态生成htm页面 前段时间做项目,一直都在寻找一种动态生成htm页面的方法,要求配置简单,和项目无关。 功夫不负有心人,终于被我找到了,只需要在web.config中进行简单配置,就可以达到动态生成静态页面的效果,同时又不影响Url重定向。web.config中需要注意的配置节为、、、,在这些配置节里边都有注释,容易看懂。 “Asp.Net 配置”选... 阅读全文

posted @ 2008-10-09 20:18 chen eric 阅读(236) 评论(0) 推荐(0)

摘要:Code Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->HttpModule实现aspx中文简繁体的自动转换 用 HttpModule 实现了 ASP.Net (*.aspx) 中文简繁体的自动转换! 思路相当简单! Global.asax ... 阅读全文

posted @ 2008-10-09 20:08 chen eric 阅读(343) 评论(0) 推荐(0)

摘要:C# code public class HttpModule : System.Web.IHttpModule { /// /// 实现接口的Init方法 /// /// public void Init(HttpApplication context) { context.BeginRequest += new EventHandler(ReUrl_BeginRe... 阅读全文

posted @ 2008-10-09 20:04 chen eric 阅读(418) 评论(0) 推荐(0)

摘要:iis6开启gzip后,是先将需要压缩的静态文件压缩保存在一个目录,请求来时先判断是否支持gzip,不支持直接发送静态文件,支持则再判断文件是否修改,没有就直接发送压缩的文件,有则重新生成压缩文件。 根据我对公司的多个网站观察访问者浏览器支持gzip的高达99%以上,我就想又何必多保存一份静态文件,直接保存压缩后的文件不就ok,既节约了空间又节约了处理的过程,万一碰见那1%不到的访客,解个压... 阅读全文

posted @ 2008-10-09 20:02 chen eric 阅读(266) 评论(0) 推荐(0)

摘要:使用HttpModule实现多个域名分别绑定到子目录 目前虚拟主机商提供将多个域名绑定到站点根目录,但是不提供类... 阅读全文

posted @ 2008-10-09 19:54 chen eric 阅读(295) 评论(0) 推荐(0)

摘要:HttpModule的实现 2008-04-21 22:56 HttpModules实现了类似于ISAPI Filter的功能,在开发上,通常需要经过以下步骤: 1.编写一个类,实现IhttpModule接口 2.实现Init 方法,... 阅读全文

posted @ 2008-10-09 19:51 chen eric 阅读(267) 评论(0) 推荐(0)

摘要:HttpModules实现了类似于ISAPI Filter的功能,在开发上,通常需要经过以下步骤: 1.编写一个类,实现IhttpModule接口 2.实现Init 方法,并且注册需要的方法 3.实现注册的方法 4.实现Dispose方法,如果需要手工为类做一些清除工作,可以添加Dispose方法的实现,但这不是必需的,通常可以不为Dispose方法添加任何代码。 5.在Web.conf... 阅读全文

posted @ 2008-10-09 19:35 chen eric 阅读(201) 评论(0) 推荐(0)

摘要:静态页转换平台(StaticPol)-静态页生成终极解决方案 我本身非常不喜欢写文字材料,但是这个东西相信是很多人都需要的,把心得写出来和大家分享一下,也好让大家都努力PP,以助于尽快完善这个东东,早日贴出来供大家下载使用。 为什么要生成静态页? 这个问题咱们就不多说了,他的优点只有一个,大大提高网站性能,对于数据量大、访问量大的网站不采用静态页输出的解决方案,恐怕真受不了了... 阅读全文

posted @ 2008-10-09 17:41 chen eric 阅读(267) 评论(0) 推荐(0)

摘要:所谓动态代码执行,和脚本引擎有点类似。就是程序执行期从字符串或者文本文件中读取一段 C# 代码,在内存中动态编译成程序集,并创建相关类型实例执行相关方法。 具体的实现可参考下面的代码。如需要生成程序集文件,可参考《使用CodeDom生成程序集》。 using System; using System.Reflection; using System.Globalization; using M... 阅读全文

posted @ 2008-10-08 22:16 chen eric 阅读(375) 评论(0) 推荐(0)

摘要:有一位做ASP的朋友问我:“在ASP.NET中的程序如何进行动态的编译,就像在ASP中一样,由自己通过程序生成应用程序文件,然后直接运行。” 我不禁失笑,可转念一想,在一个既要灵活又要高效率的 系统中我们确实需要遵循某些规则来动态生成一些程序,然后由新的程序来负担新的任务,这样运行的效率才比较高。当然也可以使用不同的配置信息利用同一个程序完成,但是这就好像使用Html和使用应用程序作为主要浏览... 阅读全文

posted @ 2008-10-08 22:05 chen eric 阅读(623) 评论(0) 推荐(0)

摘要:动态生成代码程序收集NO1: using System; using System.Collections.Generic; using System.Reflection; using System.Text; using System.CodeDom; using System.CodeDom.Compiler; namespace csrepl { class Pro... 阅读全文

posted @ 2008-10-08 22:02 chen eric 阅读(248) 评论(0) 推荐(0)

摘要:自定义表单的实现方法浅谈 2008年05月29日 星期四 11:32 自定义表单的用途比较广泛,在OA的自定义工作流程中、CMS功能扩展、自定义调查中都将涉及到。为什么要使用自定义表单呢?试想一下,如果某个系统中没有自定义表单功能,而要实现增加功能或系统扩展,会怎么样?这时只能依靠界面设计师与程序员配合再... 阅读全文

posted @ 2008-10-08 21:31 chen eric 阅读(1879) 评论(1) 推荐(0)

摘要:集成工作流与自定义表单 2008年05月28日 星期三 15:50 工作流系统可以说是最多最乱的一个系统了。至今仍然没有哪一家工作流系统取得领先的位置。而工作流系统中往往只重视流程方面的东西,而对于自定义表单则做得很弱。而实际上流程的结果需要靠表单来展现,没有一个强劲的自定义表单来配合,再好的工作流系统也不过是镜中月水中花。本文便是BP... 阅读全文

posted @ 2008-10-08 21:28 chen eric 阅读(1218) 评论(0) 推荐(0)

摘要:访问网页慢怎么办 查找上网速度慢的原因 出处:中国IT实验室 作者:QS 2008-10-03 00:00 评论 字体大小:大 | 中 | 小 在网络管理工作中,网络管理人员经常会遇到局域网内主机之间访问速度正常,而通过浏览器访问网页(通常所讲的上网)速度慢的情况。 一、 网页访问介绍 在网络管理工作中,网络管理人员经常会遇到局域网内主机之间访问速度正常,而通过浏览器访问... 阅读全文

posted @ 2008-10-03 00:51 chen eric 阅读(1140) 评论(0) 推荐(0)