摘要:
以下是我在使用NHibernate过程中遇到的一些小问题,记录下来,权当笔记吧!1.自增序列与严格类型匹配 在使用Oracle数据库的自增主键时,hbm.xml配置文件中generator class可设为"increment",也可设为"sequence",最好使用"increment",使用"... 阅读全文
摘要:
这是一篇迟到了很久的文章,要不是今天看到Mediar朋友写的“基于ESFramewok的 客户端和客户端通迅”的文章,我也许还不会想起写这篇应该很早就发表的Blog,它可以帮助ESFramework的研究者/使用者们更好的使用ESFramework。Mediar朋友的那篇文章中介绍了通过服务器转发P2PMessage,Mediar手动实现了一个自己的处理器,实际上ESFramework已经... 阅读全文
摘要:
(本文适用于ESFramework V0.2+) 现在我们回想一下,当网络组件(Tcp/Udp组件)接收到一个消息后,这个消息会流经哪些组件,然后再通过网络组件发送出去了。如果你研究过ESFramework V0.1,你会发现,消息“行走”的路线模型可以用下图表示出来: 请求消息(路径由黑线表示)经过网络组件后,会被Hook链中的各个Hook按照特定的顺序处理,然后到达消息处理... 阅读全文
摘要:
(本文适用于 ESFramework V0.2+) 不知你是否还记得,前面我们讲过,ESFramework规定了插件有如下特点: (1)一个插件是一个独立的物理单元。它可以独立的提供一项完整的服务(功能),而不需要依赖于其它插件。 (2)插件能自我描述 ―― 插件的所有对外的发布信息都由插件自己内部提供,而不依赖于外部文件或注册表。 (3)插件能自我管理 ―― 插件如果需要配置信息,... 阅读全文
摘要:
对于游戏编程而言,我也是个初学者,这个游戏编程入门系列的文章,就当作是我在学习游戏编程的笔记和阶段小结吧。我们先从最简单的“精灵”开始,暂时我们不需要考虑DirectX或是OpenGL,不需要考虑3维等等这些复杂情形,直接使用GDI+绘图功能就可以了。 精灵,是构成游戏中活动体(比如,飞机、野兽等游戏人物)的最基本单元,任何一个活动体都可以由一个或多个精灵组合而成,每个精灵都是一个对... 阅读全文
摘要:
ESFramework对Tcp和Udp协议都提供了完整的支持,在ESFramework介绍之(21)-- Tcp组件接口ITcp介绍 和 ESFramework介绍之(23)―― AgileTcp 两篇文章中介绍了Tcp组件,相对于Tcp来说,Udp要简单许多,所以我在这里打算用一篇文章来介绍它。需要首先提出的是,ESFramework.Network命名空间下的所有直接类(即,不包括ES... 阅读全文
摘要:
1.Nullable类型可以这么用! int?cursor;//其它逻辑cursor=(++cursor)??default(int); 上述代码的含义是,如果cursor为空值,则取int型的默认值0,否则,将cursor值增加1。特别注意++cursor,当cursor为空值的时候,++curs... 阅读全文
摘要:
(本文适用于ESFramework V0.2+) QQ上,你给好友发消息,如果对方不在线,则服务器会把这个消息持久化存起来,等好友下次上线时,再转发给他。像这样的消息在ESFramework中称为OverdueMessage。显然,MSN没有支持OverdueMessage。 当然了,ESFramework中的OverdueMessage不仅仅是文字消息,而是可以为任何类型的消息,比... 阅读全文
摘要:
最近好事连连啊!2006-04-30 11:30:00 本Blog访问量突破100000 ! 也祝嘟嘟于昨天顺利通过硕士答辩! 阅读全文
摘要:
你一定经常看见类似下面的图标: 它们就表示“撤销”与“反撤销”。在程序中,这种功能通常是使用Command模式实现的,本文也不例外。首先抽象定义Command,使用ICommand接口: publicinterfaceICommand{voidExcute();} Excute表示执行该ICom... 阅读全文
摘要:
ESFramework中很多重要的组件都配备了日志记录器IEsbLogger,用于记录框架运行时的错误和异常。这些重要组件都暴露了一个名为“EsbLogger”的属性,用于设值法注入日志记录器。 在构建应用时,我采用Spring.net进行组件装配,在Spring的XML配置文件中,需要为这些重要组件配置“EsbLogger”属性,为了不遗漏、配置不错误,手动装配时必须非常小心,甚至... 阅读全文
摘要:
NHibernate功能的强大,勿庸置疑。但是很多地方使用起来也颇为繁琐,比如,无法完整的构建数据层、我们很多时候还是需要绕过NHibernate而直接使用ADO.net;比如,任何一次数据访问,哪怕只是简单的数据读取,我们都需要仔细的处理Session、Transaction。如果你的数据层使用... 阅读全文
摘要:
(本文内容适合于 ESFramework V0.2+) 通常,最单纯的情况是一个插件对应某一特定类型的功能请求,但是,在有的应用中也会出现这样的情况,有多种类型的功能请求相互关联、并且可能交叉,如果是这样,对应每种类型的请求都开发一个插件可能会非常困难,因为这可能会牵涉到插件之间的相互引用/访问,这违背了插件的“自治”性。最好的办法还是将它们放在一个插件中,通过ServiceItem... 阅读全文
摘要:
我们来讨论一下这种情景,你采用基于ESFramework的4层架构进行应用开发,你分析用户的需求,并将其分类整理为几大块,考虑每一块使用一个功能插件来完成。在这几个插件中,有个插件需要访问某个数据库,并且只有这个插件需要访问这个数据库,根据插件的“自治”性质,你不想将本插件中的数据访问“上升蔓延”到应用程序(FS),而是让它“仅仅”在本插件中,这样,无论是对FS还是插件都是有好处的--FS... 阅读全文
摘要:
从事了几年的C/S模式的开发,曾一直无暇研究B/S,前段时间摊上了一个B/S的活,这才开始认真的关注其B/S开发。而且,AJAX技术的风起云涌,也使得B/S应用的表现力日益增强,大有逐步吞食C/S领地之势。这两天通过《Ajax基础教程》开始学习Ajax技术,在附录的Ajax框架介绍中发现了这样一句... 阅读全文
摘要:
框架,从另外一个角度说,就是一个半成品的应用程序,既然如此,框架在运行的过程中也会遇到诸多的异常、错误情况,我们需要将这些情况记录下来,以便在发生问题时为我们的诊断提供必要的帮助。 最最开始,那还是在ESFramework的前身即EnterpriseServerBase的时候,由于当时只是将EnterpriseServerBase作为一个类库,而并没有提升到一个框架的高度,所以是没有... 阅读全文
摘要:
前面已经介绍了ITcp接口,而AgileTcp就是ESFramework给出的ITcp的参考实现。在之前,我曾经讲解过模拟完成端口的Tcp组件实现和异步Tcp组件实现,在它们的基础之上,我更改了处理策略,而形成了AgileTcp,目的是更清晰的结构、更高的效率。这个策略会在后面讲到。 Tcp组件主要控制着系统与终端用户的所有消息的进出,ITcp接口描述了这个组件的外貌,告诉外部如何使... 阅读全文
摘要:
(本文名字取为“服务器系统自动升级”,实际上适用于所有应用程序自动升级的情况。) 前文介绍了在服务器或客户端应用程序运行的过程中,插件如何自动升级、更新。基于前文相同的理由,AS、FS、IRAS也需要有自动升级的功能。 与插件在运行时动态更新不同,服务器系统无法在运行时动态更新,只有在服务器系统重新启动的时候,才是自动升级的切入点。(1)对于功能服务器FS,可以采用持续/逐个... 阅读全文
摘要:
写了这么多篇介绍ESFramework的文章才想起来还有一些很基础的内容没有介绍,前面介绍的一些组件、框架基本上是与协议无关的(比如无论是Tcp还是Udp甚至是Remoting、WebService都可以通用),然而到了应用的最底层,我们总需要选择一种通信协议,.net Framework对Remoting和WebService已经封装的足够好了,而对Tcp和Udp提供的API还是... 阅读全文
摘要:
记不得在哪里看过这句话,“当你拥有一把用得顺手的锤子,就会认为全世界都是钉子”。所有的事情、所有的问题,你都尝试用这把锤子去解决。很多情况下,常常,这把锤子解决不了问题,或者说,有更好的工具来解决手头的问题。比如,将钉子从木头中取出来,使用起子会更有效率、更省事。 编程语言,比如C#,就是我们手上的锤子;而由此语言而形成的思维方式、思考习惯更是我们头脑中一把无形的锤子。这是好事、也是坏事--好事在于我们至少有一把锤子,坏事在于我们常常因为手中的用了顺手的锤子而忽略了其它工具。 我曾经在广州的一个公司建议我所在部门的经理将AOP技术应用到我们手头的项目中来解决很多AOP擅长而OOP不擅长的事情. 阅读全文