随笔分类 -  Happy Framework

幸福框架(Happy Framework)。
企业应用:一个够用的、通用的状态机(管理实体的业务状态)
摘要:背景企业应用下,需要关注三个状态机:业务相关的状态机。审批流程相关的状态机。持久化相关的状态机。某些企业应用开发人员终其一生就是希望能开发出通用的一个框架以简化这些状态机的开发。本文重点关注:“业务相关的状态机”。常见的状态机需求产品的状态机单据的状态机业务相关的状态机的一般性需求如下:当处于某个状态时,可以执行哪些合法的迁移?迁移的前置条件是什么?当处于某个状态时,可以执行哪些合法的操作?如:已提交和已审核状态的单据不能被修改。实现状态机我目前使用过两种思路实现这种状态机:使用状态模式。这种要求为每种单据的状态管理定义一套状态体系,有点麻烦了。使用状态表格。这种就是本文介绍的。下面先看两个示 阅读全文

posted @ 2013-11-27 09:18 幸福框架 阅读(4907) 评论(3) 推荐(13) 编辑

幸福框架:使用 “离线事件” 处理 “长事务”
摘要:背景事件有两种使用方式:一、作为传统的监听者模式以达到程序结构的解耦;二、作为消息机制以达到时间和空间上的解耦,如发送到远程服务器、持久化到队列等待。今天介绍如何使用“离线事件”处理“长事务”,这就需要把事件当做消息对待。我理解的长事务是“执行时间长的任务,具体多少没有标准”,如果希望在一个数据库事务中完成这些长事务是不现实的,之前我的做法是换成存储过程以降低事务的执行时间,以后我会采用“离线事件”。离线事件:事件的一部分是同步执行,另外一部分会被异步的离线的在另外一台机器执行。简单示例下载地址:OfflineEventStudy。项目结构Common:类库,包含了事件和事件监听者(同步事件监 阅读全文

posted @ 2013-07-10 09:53 幸福框架 阅读(1490) 评论(6) 推荐(1) 编辑

幸福框架:如何扩展编号生成器
摘要:背景昨天发布了一个编号生成器(http://www.cnblogs.com/happyframework/p/3177128.html),有朋友留言问支不支持某些规则,因为是可以扩展的,所以很容易支持各种规则,今天我就写了另外两种规则,也是对留言的朋友做一个回复。留言A留言这个规则其实就是访问实体的属性就行了,属性里做个判断返回X或Y。扩展类型 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 阅读全文

posted @ 2013-07-09 09:23 幸福框架 阅读(1849) 评论(10) 推荐(2) 编辑

幸福框架:可扩展的、动态的、万能的 编号生成器
摘要:背景之前写过三篇文章介绍如何实现这种编号生成器:http://www.cnblogs.com/happyframework/archive/2013/05/12/3073688.html。http://www.cnblogs.com/happyframework/archive/2013/05/13/3074410.html。http://www.cnblogs.com/happyframework/archive/2013/05/14/3077095.html。上周整理了一下,把代码合并到了http://happy.codeplex.com/,需要的朋友直接下载最新代码,不要用Downloa 阅读全文

posted @ 2013-07-08 08:57 幸福框架 阅读(3167) 评论(11) 推荐(5) 编辑

幸福框架:模块化开发
摘要:什么是模块模块 = 后台逻辑(DLL)+ 显示逻辑(静态资源)+ 数据库 + 其它初始化逻辑。如何识别模块和通知模块各种事件识别模块1 [assembly: Happy.Bootstrap.ParticipateInBootstrap]监听启动事件 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.IO; 7 8 using Happy.Bootstrap; 9 . 阅读全文

posted @ 2013-06-18 14:59 幸福框架 阅读(2386) 评论(4) 推荐(0) 编辑

幸福框架:模式驱动开发
摘要:背景我非常喜欢各种模式(很多还都看不懂),几乎会购买关于模式的任何书籍,生怕有所遗漏,关于模式的优势以及如何使用好模式已经有很多文章在介绍了,我今天想给大家分享的是我的一个想法:模式驱动开发,即如何使用模式来进行真实的项目开发。思路关于模式我们已经有了足够的资源(甚至泛滥),目前缺乏的是将这些模式落地的具体框架、组件和工具(后面我简称为平台)。想做一个通用的平台确实不容易,但是我们可以将业务领域和技术领域进一步限定,甚至只限定在一个应用程序中,在这种限定的业务领域和技术领域内做一个平台应该不是很难了。以界面为例,在我做过的企业应用领域出现的界面模式还没有超过20种,如果这20种模式有一个好的平 阅读全文

posted @ 2013-06-09 09:31 幸福框架 阅读(1120) 评论(1) 推荐(0) 编辑

幸福框架:全站式代码生成器示例
摘要:背景一直在做企业应用,也一直在使用代码生成器,代码生成器分两个维度,一个维度是”主动或被动“,另外一个维度是”运行时或编译时“,这两种维度会有四种组合,每个组合都有其应用的场景,今天我就介绍一下Happy是如何使用代码生成器的。概念介绍主动:可以生成多次,会”主动“的合并生成代码和用户自定义代码,C#的部分类和ExtJs的扩展类就是,通过一些文本合并工具也是可以实现的。被动:不可以生成多次,每次生成都会覆盖用户自定义的代码。运行时:运行时的代码生成,也叫元编程,动态语言几乎都支持,静态语言可以使用动态编译。编译时:编译时的代码生成,是狭义的代码生成器的代名词。还有一点需要说明的,如果是基于应用 阅读全文

posted @ 2013-06-04 08:08 幸福框架 阅读(6645) 评论(26) 推荐(9) 编辑

幸福框架:在应用层实现触发器
摘要:背景企业应用开发过程中经常面对一些非功能型需求,如:自动收集和设置审计信息、索引和关系约束,有些非功能需求当然可以用数据库自带的功能,如索引约束,但是应用层视乎也有必要重复一次,因为当违背这种约束的时候我们希望提示给用户友好的信息,如:‘xxx已经存在,xxx必须唯一’,这篇文章我就介绍一个简单的方案应对这种需求。思路我觉得数据库的触发器是个好东西,应用层完全可以借用一下,我还认为如果我在应用层实现了触发器,像一些前置条件和后置条件验证也可以用触发器实现(这块我不是很清楚设计的是否合理,还是要引入另外一个继承体系)。实现核心类核心代码DefaultTriggerService.cs 1 usi 阅读全文

posted @ 2013-06-03 08:37 幸福框架 阅读(1883) 评论(10) 推荐(0) 编辑

幸福框架:准备抽象NHibernate和EntityFramework,大家给点意见
摘要:背景考虑到目前中小企业应用的主流是ORM,我准备在NHibernate和EntityFramework之间找到一个抽象层,也就是说我准备只支持NHibernate和EntityFramework。思路NH和EF都实现了“工作单元”和“主键映射”这两种企业应用模式,而这两种模式其实就是管理一种状态机,如下图:实现工作单元接口 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7... 阅读全文

posted @ 2013-05-31 09:02 幸福框架 阅读(2747) 评论(9) 推荐(1) 编辑

幸福框架:元数据驱动界面,支持三级配置(生成期、运行期和开发期)
摘要:背景信息系统开发中,配置表格、树和表单的过程占据了开发的近一半的时间(可能更多),如果要支持运行期间修改配置,如:修改表格布局、表单布局、查询面板,就会更加花费时间。这篇文章我就介绍一下如何使用元数据驱动UI的开发。思路支持三级元数据配置:生成期配置:使用代码生成器生成,只能由生成器修改。运行期配置:使用配置修改器修改,运行期由维护或实施人员修改。开发期配置:由开发人员维护。三级配置,由上到下优先级越来越高,下级继承上级同时覆盖上级。如下图所示:实现配置 + 代码生成器生成器项目结构generated/Metadata.ejs生成后的应用项目结构user/app/view/Grid.js 1 阅读全文

posted @ 2013-05-25 08:54 幸福框架 阅读(3376) 评论(1) 推荐(2) 编辑

CQRS:CQRS+AJAX架构 之 查询(Q)模型设计
摘要:背景准备采用CQRS架构,之前也简单的应用过(只是把读和写在程序级别进行了分离),这篇文章是我最近几天的思考,写下来希望大家多提意见。这篇文章不会涉及Command端的设计,重点关注如何设计查询。真心的希望大家看完后能给出你们的意见和想法。什么是CQRSCQRS:Command Query Responsibility Separation。我喜欢职责分离,这也是我采用这种架构的原因,确实能带来单一职责的优点。简单的CQRS复杂的CQRSCQRS的常见查询需求下面是系统的一些查询需求:查询面板高级查询数据行级别的权限如:个人、部门、分公司、品种。固定约束如:启用、合法、租户ID。需求总结CQR 阅读全文

posted @ 2013-05-23 08:57 幸福框架 阅读(2985) 评论(14) 推荐(3) 编辑

幸福框架:可扩展的应用程序 “启动引导” 框架
摘要:背景应用程序引导经常要做如下这些事情:动态加载DLL(或各种插件)。注册IOC容器。设置其他全局配置。尤其以注册IOC容器的代码最烦人,看一个我昨天写的烦人代码: 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.Threading; 7 8 using Microsoft.Practices.ServiceLocation; 9 using Mi... 阅读全文

posted @ 2013-05-22 08:35 幸福框架 阅读(1991) 评论(10) 推荐(3) 编辑

幸福框架:发布订阅模式 之 同步订阅、异步订阅和离线订阅
摘要:背景事件驱动解除了发布者和订阅者之间的耦合,在UI层面,我明经常采用这种编程理念。服务器端最近也开始流行起来了,我也一直小范围的在采用。今天就跟大家分享一下我写的一个小框架。框架原理一张图片胜过前言万语。代码示例下载地址:http://yunpan.cn/Q5SUcWdiA2mmk。项目结构关键代码TestEvent.cs 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 using . 阅读全文

posted @ 2013-05-21 06:43 幸福框架 阅读(2952) 评论(22) 推荐(4) 编辑

DDD:DDD+CQRS+高伸缩性的分布式架构
摘要:物理架构物理架构优势WEB服务器可以单独做负载平衡(独立伸缩)。应用服务可以单击做负载平衡(独立伸缩)。容易引入“后台任务服务器”(正在做这方面的支持)。支持混合部署(一部分业务逻辑运行在WEB服务器,一部分业务逻辑运行在应用服务器),部署方式对开发人员几乎透明。如何选择部署模型当用户数少(自己测试)的时候可以不用应用服务器,只做WEB负责平衡。当用户数多(自己测试)的时候,将频繁执行的业务逻辑分离部署到应用服务器上。对于那些长时间(自己测试)执行的任务,将它们部署到后台任务服务器上。示例代码项目结构WEB服务器代码 1 using System; 2 using System.Collect 阅读全文

posted @ 2013-04-19 14:26 幸福框架 阅读(6142) 评论(14) 推荐(3) 编辑

幸福框架:如何阅读幸福框架的代码
摘要:HappyFramework是一个支持DDD、CQRS、OSGI、EPC、EventDriven、MetadataDrivenProgramm理念的开源框架,而且她是可以实战的。不要被上边的话给欺骗了,当然了,其实也没有欺骗大家,只是HappyFramework的CQRS、OSGI、EPC、EventDrivent、MetadataDrivenProgramming都是实现的很简单,全是限制在AppDomain内和仅支持单线程。这并不代表不可以跨越AppDomain甚至无理进程,或者支持多线程,只是如果想做到这一步,已经有很多的框架提供此类功能了,如:NServiceBus之类的框架。而Hap 阅读全文

posted @ 2013-04-09 16:12 幸福框架 阅读(3311) 评论(7) 推荐(2) 编辑

幸福框架:应当如何使用和处理异常
摘要:常见异常使用场景:以写(有副作用)为目的的方法尽量将返回值标记为void,用异常来表示失败,这样你的代码会非常简洁,不会出现大量的条件语句。简洁的版本 1 public void ChangeUsername(Guid userId, string newUsername) 2 { 3 var user = _userRepository.get(userId); 4 5 if(_UsernameRule.Validate(newUsername)) 6 { 7 throw new UsernameInvalidException("用户名不符合规则"... 阅读全文

posted @ 2013-04-09 14:35 幸福框架 阅读(1653) 评论(2) 推荐(4) 编辑

幸福框架:元数据驱动开发
摘要:名称解释元数据:描述数据的数据。元编程:运行时写程序的程序。代码生成器:编译时写程序的程序。元数据驱动开发的步骤定义元数据格式。定义元数据的存储方式。运行时编辑元数据。使用元数据。编译时用元数据。运行时用元数据。运行时影响代码。运行时修改代码。元数据驱动开发的常见使用场景代码生成器。界面配置管理器。工作流引擎。状态机引擎。元编程。备注:让元数据驱动你的开发,幸福框架中会大量用到这种开发模式。 阅读全文

posted @ 2013-04-06 14:21 幸福框架 阅读(2121) 评论(1) 推荐(0) 编辑

幸福框架:我是如何使用日志的
摘要:日志的用途跟踪,监控应用程序的执行(框架开发人员需要关注这点)。审计,监控用户的行为(应用开发人员需要关注这点)。日志的使用原则使用或不适用日志,不应当对系统行为产生影响。可以通过配置修改日志的记录方式和记录哪些日志。适合AOP的日志场景记录“某些”异常。性能监控。操作日志。不适合AOP的场景执行跟踪。SQL监控。下边介绍一下“幸福框架”中的日志API和使用原则日志接口拷贝了Log4Net 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using S 阅读全文

posted @ 2013-04-05 15:12 幸福框架 阅读(891) 评论(0) 推荐(0) 编辑

幸福框架:待实现的基础应用列表
摘要:数据字典导航系统帮助系统规则引擎系统自动编码系统审批流程系统权限管理系统元数据管理系统 阅读全文

posted @ 2013-01-30 15:46 幸福框架 阅读(719) 评论(0) 推荐(1) 编辑

幸福框架:核心库项目组织方式
摘要:项目结构项目说明Happy:此项目编译时和运行时都不依赖第三方程序集,属于在.Net Framework之上的工具库。Happy.Infrastructure:此项目编译时和运行时都不依赖第三方程序集,属于隔离层。Happy.Infrastructure.Ioc.Unity:此项目依赖Enterprise Library 和Happy.Infrastructure,属于适配层。Happy.Data:此项目编译时和运行时都不依赖第三方程序集,属于隔离层。Happy.Data.EntityFramework:此项目依赖Entity Framework 、Happy.Domain、Happy.Dat 阅读全文

posted @ 2013-01-29 09:50 幸福框架 阅读(999) 评论(0) 推荐(1) 编辑

导航

我要啦免费统计