幸福框架:可扩展的、动态的、万能的 编号生成器
2013-07-08 08:57
295 查看
背景
之前写过三篇文章介绍如何实现这种编号生成器:/article/4736829.html。
/article/4736830.html。
/article/4736831.html。
上周整理了一下,把代码合并到了http://happy.codeplex.com/,需要的朋友直接下载最新代码,不要用Download(直接去Source Code下载)。
今天重点介绍一下如何使用。
一些常见的编号示例
像如下这些规则,非常容易支持,如:【xxxx】年某企业第【x】份劳动合同,规则配置:【<日期:yyyy>】年某企业第【<种子:销售订单:yyyy>】份劳动合同。
xxxx年xxxx月xxxx日第x份销售订单,规则配置:<日期:yyyy年MM月dd日>第<种子:销售订单:yyyyMMdd>份销售订单。
测试代码
using System; using System.Collections.Generic; using Microsoft.VisualStudio.TestTools.UnitTesting; using System.IO; using Happy.Domain.CodeRule; using Happy.Domain.CodeRule.Generators; namespace Happy.Test.Doamin.CodeRule { [TestClass] public class CodeRuleInterceptorTest { [TestMethod] public void Intercept_Test() { var seedKey = "销售订单"; var file = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App_Seeds", seedKey + ".txt"); if (File.Exists(file)) { File.Delete(file); } var interceptor = new CodeRuleInterceptor(); interceptor .RegisterInterceptor(new DateTimeCodeGeneratorInterceptor()) .RegisterInterceptor(new LiteralCodeGeneratorInterceptor()) .RegisterInterceptor(new SeedCodeGeneratorInterceptor(new FileSeedStore())); var generator = interceptor.Intercept("前缀---<日期:yyyyMMdd>---中缀---<种子:销售订单>---后缀"); Assert.IsNotNull(generator); Assert.AreEqual("前缀---20130705---中缀---00001---后缀", generator.Generate(new GenerateContext())); Assert.AreEqual("前缀---20130705---中缀---00002---后缀", generator.Generate(new GenerateContext())); Assert.AreEqual("前缀---20130705---中缀---00003---后缀", generator.Generate(new GenerateContext())); } } }
常见问题
问:种子的生成能保证唯一性吗?答:是的,在并发情况下也能保证唯一。问:种子的生成能保证连续性吗?答:是的,约束就是必须使用基于数据库的种子仓储(Happy.Infrastructure.PetaPoco.PetaPocoSeedStore),且必须运行在处于”可重复读“隔离级别的事务中,上边的测试用例采用的是基于文件的。
问:为什么一定要配置规则,解释执行?答:这是面向产品级别的项目,如果是一般的项目,直接用种子仓储就行了,代码如下:
using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using System.IO; using Happy.Domain.CodeRule; namespace Happy.Test.Doamin.CodeRule { [TestClass] public class FileSeedStoreTest { [TestMethod] public void NextSeed_Test() { var seedKey = "销售订单"; var file = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App_Seeds", seedKey + ".txt"); if (File.Exists(file)) { File.Delete(file); } var seedStore = new FileSeedStore(); Assert.AreEqual(1, seedStore.NextSeed(seedKey)); Assert.AreEqual(2, seedStore.NextSeed(seedKey)); Assert.AreEqual(3, seedStore.NextSeed(seedKey)); } } }
备注
这种规则生成器,我在产品和项目中都有用过,新入门的朋友可以直接使用,高手要多提些意见。相关文章推荐
- 幸福框架:可扩展的、动态的、万能的 编号生成器
- 幸福框架:可扩展的、动态的、万能的 编号生成器
- 幸福框架:如何扩展编号生成器
- 幸福框架:如何扩展编号生成器
- YbSoftwareFactory 代码生成插件【十五】:Show 一下最新的动态属性扩展功能与键值生成器功能
- shiro安全框架扩展教程--如何动态控制页面节点元素的权限
- 幸福框架:可扩展的应用程序 “启动引导” 框架
- shiro安全框架扩展教程--如何动态控制页面节点元素的权限
- (六)SSO之CAS框架扩展 改动CAS源代码实现与ESS动态password验证对接
- .NET:可扩展的单据编号生成器 + 简单的解释器
- PHP扩展框架各个宏编译成so动态链接库文件之后对应的函数符号对照
- .NET:可扩展的单据编号生成器 之 基于缓冲区的顺序号
- shiro安全框架扩展教程--如何动态控制页面节点元素的权限
- (六)SSO之CAS框架扩展 修改CAS源码实现与ESS动态密码验证对接
- .NET:可扩展的单据编号生成器 之 基于缓冲区的顺序号
- .NET:可扩展的单据编号生成器 之 顺序号(防止重复)
- Show 一下最新的动态属性扩展功能与键值生成器功能
- shiro安全框架扩展教程--如何动态修改资源权限不需要重启项目
- .Net可扩展的单据编号生成器-SNF.CodeRule--SNF快速开发平台3.2
- 初识Struts(九)-------动态验证框架validator