博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
幸福框架:可扩展的、动态的、万能的 编号生成器
阅读量:6462 次
发布时间:2019-06-23

本文共 2874 字,大约阅读时间需要 9 分钟。

背景

之前写过三篇文章介绍如何实现这种编号生成器:

上周整理了一下,把代码合并到了,需要的朋友直接下载最新代码,不要用Download(直接去Source Code下载)。

今天重点介绍一下如何使用。

一些常见的编号示例

像如下这些规则,非常容易支持,如:

  • 【xxxx】年某企业第【x】份劳动合同,规则配置:【<日期:yyyy>】年某企业第【<种子:销售订单:yyyy>】份劳动合同。
  • xxxx年xxxx月xxxx日第x份销售订单,规则配置:<日期:yyyy年MM月dd日>第<种子:销售订单:yyyyMMdd>份销售订单。

测试代码

1 using System; 2 using System.Collections.Generic; 3 using Microsoft.VisualStudio.TestTools.UnitTesting; 4 using System.IO; 5  6 using Happy.Domain.CodeRule; 7 using Happy.Domain.CodeRule.Generators; 8  9 namespace Happy.Test.Doamin.CodeRule10 {11     [TestClass]12     public class CodeRuleInterceptorTest13     {14         [TestMethod]15         public void Intercept_Test()16         {17             var seedKey = "销售订单";18             var file = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App_Seeds", seedKey + ".txt");19             if (File.Exists(file))20             {21                 File.Delete(file);22             }23 24             var interceptor = new CodeRuleInterceptor();25 26             interceptor27                 .RegisterInterceptor(new DateTimeCodeGeneratorInterceptor())28                 .RegisterInterceptor(new LiteralCodeGeneratorInterceptor())29                 .RegisterInterceptor(new SeedCodeGeneratorInterceptor(new FileSeedStore()));30 31             var generator = interceptor.Intercept("前缀---
<日期:yyyymmdd>
---中缀---
<种子:销售订单>
---后缀");32 33 Assert.IsNotNull(generator);34 35 36 Assert.AreEqual("前缀---20130705---中缀---00001---后缀", generator.Generate(new GenerateContext()));37 Assert.AreEqual("前缀---20130705---中缀---00002---后缀", generator.Generate(new GenerateContext()));38 Assert.AreEqual("前缀---20130705---中缀---00003---后缀", generator.Generate(new GenerateContext()));39 }40 }41 }

常见问题

问:种子的生成能保证唯一性吗?答:是的,在并发情况下也能保证唯一。

问:种子的生成能保证连续性吗?答:是的,约束就是必须使用基于数据库的种子仓储(Happy.Infrastructure.PetaPoco.PetaPocoSeedStore),且必须运行在处于”可重复读“隔离级别的事务中,上边的测试用例采用的是基于文件的。

问:为什么一定要配置规则,解释执行?答:这是面向产品级别的项目,如果是一般的项目,直接用种子仓储就行了,代码如下:

1 using System; 2 using Microsoft.VisualStudio.TestTools.UnitTesting; 3 using System.IO; 4  5 using Happy.Domain.CodeRule; 6  7 namespace Happy.Test.Doamin.CodeRule 8 { 9     [TestClass]10     public class FileSeedStoreTest11     {12         [TestMethod]13         public void NextSeed_Test()14         {15             var seedKey = "销售订单";16             var file = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App_Seeds", seedKey + ".txt");17             if (File.Exists(file))18             {19                 File.Delete(file);20             }21 22             var seedStore = new FileSeedStore();23 24             Assert.AreEqual(1, seedStore.NextSeed(seedKey));25             Assert.AreEqual(2, seedStore.NextSeed(seedKey));26             Assert.AreEqual(3, seedStore.NextSeed(seedKey));27         }28     }29 }

备注

这种规则生成器,我在产品和项目中都有用过,新入门的朋友可以直接使用,高手要多提些意见。

 

转载地址:http://cxhzo.baihongyu.com/

你可能感兴趣的文章
拼写检查器的编写[转]
查看>>
[c#基础]关于const和readonly常见的笔试题剖析
查看>>
编写高质量代码改善C#程序的157个建议[避免finaly内的无效代码、避免嵌套异常、避免吃掉异常、注意循环异常处理]...
查看>>
kafka 集群安装与安装测试
查看>>
Codeigniter夸应用调用model
查看>>
【leetcode】Word Search (middle)
查看>>
XCode属性面板使用说明
查看>>
TinyMCE下载及使用
查看>>
KMP该算法解释(最长公共子)
查看>>
std::vector的分片拷贝和插入
查看>>
Leetcode: Count Complete Tree Nodes
查看>>
启动zookeeper时出现的问题
查看>>
WCF学习之旅——第一个WCF示例(一)
查看>>
ecshop 后台-》广告
查看>>
.NET开发之快捷键篇
查看>>
iOS开发中的错误整理,重写的构造函数中,没有通过self调用
查看>>
Nginx+Lua 积累
查看>>
数据库Mysql性能优化
查看>>
android 实现摇一摇功能
查看>>
ServiceMessage
查看>>