HappyFramework是一个支持DDD、CQRS、OSGI、EPC、EventDriven、MetadataDrivenProgramm理念的开源框架,而且她是可以实战的。
不要被上边的话给欺骗了,当然了,其实也没有欺骗大家,只是HappyFramework的CQRS、OSGI、EPC、EventDrivent、MetadataDrivenProgramming都是实现的很简单,全是限制在AppDomain内和仅支持单线程。这并不代表不可以跨越AppDomain甚至无理进程,或者支持多线程,只是如果想做到这一步,已经有很多的框架提供此类功能了,如:NServiceBus之类的框架。而HappyFramework可以和他们结合起来一起使用的。
下面对整个框架的组织方式和理念做一个简单的介绍,有朋友想阅读这个框架也可以按照这个顺序。
“Happy.DesignByContract”命名空间下的代码基本全是拷贝自“sharparchitecture”,对于契约式开发,我还没有深入了解,正在学习中。
“sharparchitecture”下载地址:http://sharparchitecture.net/。
“Happy.Specifications”命名空间下的代码基本全是拷贝自“microsoftnlayerapp”,其理念基础是领域驱动设计的“规约模式”,我之所以没有将其组织到“Happy.Domain”命名空间的原因是“Happy.Queries”命名空间也需要“规约模式”。
关于规约模式我是这么理解的,规约分查询规约、创建规约、验证规约,其中查询规约又分数据库查询规约和内存查询规约,“Happy.Specifications”命名空间下实现的是“数据库查询规约”,也叫“查询对象”,其它规约类型我会提供独自的继承体系。
“microsoftnlayerapp”下载地址:http://microsoftnlayerapp.codeplex.com/。
“Happy.Logging”的开发受到了“log4net”的影响,原本我想用其提供的NuGet包进行开发,后来之所以
决定引入隔离接口,有如下原因:
核心类型说明:
“log4net”下载地址:http://logging.apache.org/log4net/。
“Happy.ExceptionHandling”的开发受到了“ENTERPRISE LIBRARY”的影响,原本我想用其提供的NuGet包进行开发,后来之所以决定引入隔离接口,有如下原因:
"ENTERPRISE LIBRARY"下载地址:https://entlib.codeplex.com/。
“Happy.ExtensionMethods”命名空间下的代码基本全是拷贝自“Craig's Utility Library”,原本我想用其提供的NuGet包进行开发,后来之所以决定进行拷贝式复用,有如下原因:
“Craig's Utility Library”下载地址:http://cul.codeplex.com/、http://www.gutgames.com/。
“Happy.Messaging”的开发受到了“sharparchitecture”的影响,其理念基础是“命令模式”、“发布订阅模式”、“管道过滤器模式”,我准备使用三种消息机制,DomainEvent、ApplicationEvent、Command,他们三者共享一个一个基类框架(Happy.Messaging)。
关于DomainEvent、ApplicationEvent、Command的一些简单使用场景:http://www.cnblogs.com/happyframework/archive/2013/03/09/2949838.html
核心类型说明:
“sharparchitecture”下载地址:http://sharparchitecture.net/。
“Happy.OSGI”命名空间实现了简单的OSGI思想,OSGI的核心理念是管理Bundle的生命周期(安装、启动、停止)。
核心类型说明:
“Happy.Domain”命名空间下的代码借鉴了“microsoftnlayerapp”,其理念基础是领域驱动设计。
“microsoftnlayerapp”下载地址:http://microsoftnlayerapp.codeplex.com/。
“Happy.Queries”命名空间封装了UI层常用的查询API,此命名空间体现了CQRS的Q。关于如何处理系统的查询,我是这么
理解的,代码中不要出现复杂的查询,复杂的查询应当放到数据库中,通过存储过程或视图实现,程序中只能出现简单的Where查询。
元数据驱动开发也会在该层体现,通过为ViewModel设置应有的元数据,可以在编译时或运行时自动生成UI。
“Happy.Commands”继承“Happy.Messaging”的所有实现,为Create、Deleting、Updating提供几个常见的命令基类。CommandBus主要用在控制器层向应用层传递消息,即纵向传递。
“Happy.Application”继承“Happy.Messaging”的所有实现,为Create、Deleting、Updating提供几个常见的命令处理器基类。ApplicationBus主要用在业务模块和业务模块之间的消息传递,即横向传递。
还是有些乱,找个时间再重新整理一下。