ESBasic 可复用的.NET类库(00) -- 开源前言(附下载)

自从03年正式使用.NET开发以来,已经走过了6个年头,这期间我积累了几套类库和框架,ESBasic便是其中最基础的一个类库。ESBasic是Enterprise Service Basic的缩写,虽然也简写为ESB,但是它和Enterprise Service Bus(企业服务总线)没有任何关系。ESBasic是我能够快速和高效开发应用程序的利器之一,开这个专门的blog是想将它介绍给大家,希望能对大家有所启发。

ESBasic覆盖的内容包括:对象管理、插件、网络(Socket)、多线程、Emit与AOP、及相关助手类和基础类型。后面的博文会一一介绍ESBasic中每个重要类的缘起、适用场合、设计思想与实现、使用时的注意事项、扩展等。

       类库的本质是复用,最大的价值在于实用,设计一个漂亮却不实用的艺术品也许可以做Demo,但是被复用的价值已经失去了。

所谓复用的精髓,在于抽象――要抽象得恰到好处。不能太抽象,太抽象的只是概念,无法被直接使用;抽象层次也不能太低,否则,就容易与具体的应用绑定在一起,从而限制了复用的场合和范围。“高内聚,低耦合”是我们在设计可复用类时必须要遵守的原则。

OO本身就是一种抽象的思维,但是要“创造”出可复用的类,仅仅依靠OO的思想是不够的,你的思维需要不断地锻炼――经常想一想,这个类是否可以再提升一下,从而能够在更多的场合中被复用。如果能被提升,那么该如何提升?抽象层次如何提高?删除哪些?保留哪些?是否需要引入泛型参数?是否要设计为abstract类,等等。当有了足够多的这种体验之后,你就会形成一种习惯,这种习惯会帮助你成为一个优秀的可复用类库的设计者和开发者。

     ESBasic基于.NET 2.0(开发环境为VS2008),最新版本为2.0。任何反馈及意见可以Email给我:sky.zhuwei@163.com ,谢谢。
     ESBasic介绍目录预览:   

 

       ESBasic已经开源,点击这里下载源码。
       最后有一点需要说明一下,ESBasic很好的满足了我当前工作的需求 -- 这也是它之所以出现的原因,也是我的主要目的。但它并不是一个完善的库,从任何角度(如内容、设计等方面)来看,它都还有待改进的地方,我将其开源出来的目的只是为了抛砖引玉,给大家做个参考。

 

 

时间: 2024-10-24 05:33:38

ESBasic 可复用的.NET类库(00) -- 开源前言(附下载)的相关文章

Round缓存管理器RoundCacheManager--ESBasic 可复用的.NET类库(26)

1.缘起:     在增量自动获取器章节的缘起部分,我们曾提到增量缓存,本节我们将深入探讨它以及用于管理增量缓存的管理器.我们还是以增量自动获取器章节提到的例子作为基础,并做更进一步的讨论.       OK,现在让我们开始这有趣的旅程. 首先,基于前面例子给出的上下文,我们知道IIncreaseAutoRetriever获取的增量是用于累积当天的已成交订单报表的."当天已成交报表"就是一个典型的增量缓存,每当有新的增量到来,都会累加到上面. 我们假设今天是2009.07.08,那么我

循环任务切换器 CircleTaskSwitcher -- ESBasic 可复用的.NET类库(06)

 1.缘起:     假设我的订单处理系统有这样的需求:将一天24小时分为4个时段,凌晨2:15到8:30采用A类型的处理器处理接收到的订单,8:30到14:00采用B类型的处理器,14:00到20:00采用C类型的处理器,20:00到第二天凌晨2:15采用D类型的处理器.     即我们的订单处理器需要在任一天的2:15.8:30.14:00.20:00这四个时刻发生切换,这就是一个循环切换器所要做的工作.     我设计了ESBasic.Threading.Application. ICir

优先级管理器 IPriorityManager -- ESBasic 可复用的.NET类库(14)

1.缘起:     假设我们的订单处理系统所要处理的订单是有优先级的,也就是说,不同的订单类型所要求被处理的紧迫程度不同,对那些优先级高的注单要先处理,对于优先级低的注单可稍后处理.对于处于同一优先级的订单了,就按照其到达的先后顺序进行处理.     这是一个典型的管理具有优先级的对象的需求,注单就是具有优先级(With Priority)的对象.我设计了ESBasic.ObjectManagement.Managers.IPriorityManager优先级管理器(确切地说,应该称之为"具有优

定时任务管理器 TimingTaskManager -- ESBasic 可复用的.NET类库(08)

1.缘起:     假设我们的报表系统需要在每天的00:05:00统计前一天的报表数据,需要在每周一的00:30:00统计上周的报表数据,又需要在每月1日的00:30:00统计上月的报表数据. 这些报表统计任务是很常见的系统需求,对于类似这样的在指定时刻执行的定时任务,我使用ESBasic.Threading.Timers.TimingTaskManager(定时任务管理器)来处理它. TimingTaskManager与前面讲的回调定时器CallbackTimer的区别在于,CallbackT

时刻 ShortTime --ESBasic 可复用的.NET类库(01)

          (如果您能对照着源码来阅读本文,效果会更好.) 1.缘起:        假设我们的员工打卡系统,需要设定公司规定的上班时间.下班时间.以及还要对员工是否迟到早退等这些情况进行判断.        我们以什么方式来记录类似上下班时间这样只有时分秒没有年月日的时间了?你说可以使用DateTime,但是合适吗?总是觉得用DateTime来表示上下班的时间很别扭,因为我们的上下班时间并需要指定到具体的哪一天啊.        我设计了ESBasic.ShortTime来对类似上下班

日期 Date--ESBasic 可复用的.NET类库(02)

  1.缘起:     同我们从DateTime中将时刻部分作为ShortTime抽离出来一样,我们将DateTime中的日期部分也抽离出来,以ESBasic.Date类来表示.     比如,我们的报表系统是以"天"为单位来进行统计的,为了提高效率,我们会在每天凌晨将前一天的报表数据统计完毕,并存储到数据库中,一天的报表数据就对应数据库数据库中的一条记录,该记录以一个表示日期的整数而不是DateTime作为主键.比如主键值为20090501的表示这条记录对应的是2009年5月1日的报

对象获取器IObjectRetriever -- ESBasic 可复用的.NET类库(17)

1.缘起: ESBasic中许多管理对象的容器都用到了这个ESBasic.ObjectManagement.IObjectRetriever接口,所以单独将其提出来介绍一下. 当我们向对象容器(Container)请求某个对象时,也许目标对象还未加载到容器中,这可能是因为容器在初始化的时候就没有加载这个对象,也有可能是因为这个对象是容器初始化以后新增到数据库(当然也有可能是其它的持久化存储)的.在这种情况下,对象容器就可以借助IObjectRetriever来将目标对象从数据库等持久化存储中加载

工作者引擎 IWorkerEngine -- ESBasic 可复用的.NET类库(05)

1.缘起:     假设我们的系统在运行的过程中,源源不断的有新的任务需要处理(比如订单处理),而且这些任务的处理是相互独立的,没有前后顺序依赖性(顺序依赖性是指,必须在任务A处理结束后才可开始B任务),那么我们就可以使用多个线程来同时处理多个任务.每个处理任务的线程称为"工作者(线程)".      我设计了ESBasic.Threading.Engines.IWorkerEngine工作者引擎,其目的就是使用多个线程来并行处理任务,提高系统的吞吐能力.       工作者引擎的形象

双向映射 IBidirectionalMapping -- ESBasic 可复用的.NET类库(11)

1.缘起:     假设我们的用户管理系统要求用户的ID和Name都必须是唯一的,并且用户的ID和Name一经确定就不能被修改.而且管理系统经常需要根据ID来查找Name,也经常需要根据Name来查找ID.根据这样的需求,我们可以考虑使用一个Dictionary来将ID和Name缓存起来,通常ID作为Key,Name作为Value.这样便可实现通过ID查询Name的快速查找,但是,通过Name查找ID就不是那么快了,因为涉及到对Dictionary的Values做遍历的操作.那么,有可能使得通过

对象管理器 IObjectManager -- ESBasic 可复用的.NET类库(12)

1.缘起: 我们经常需要对一些动态对象进行管理,最常见的例子就是在线用户管理.当一个用户成功登陆到服务器后,我们就需要将其管理起来:当他退出后,就不再需要再管理他了.这就是所谓动态对象的含义,这些对象并不是一直需要被管理,只有当其被激活后,才需要被管理.它们总是在"激活"状态和"非激活"状态之间不断地切换. 我设计了对象管理器ESBasic.ObjectManagement.Managers.IObjectManager来管理类似的动态对象.这个类是ESBasic提