首页 / 软件开发 / Delphi / 领域驱动设计实践——流水号生成器(上)
领域驱动设计实践——流水号生成器(上)2011-12-12 博客园 保权今天在CSDN上逛的时候,我突然看到一个提问帖子:问一个大家一个问题一个字符串 加1 谁做过例如KA001A001下一个就是 KA001A002到 KA001Z999就 KA002A001这顿时引起了我的兴趣。流水号(Serial Number)在程序中应用很普遍,生成规则也各不相同。(比如,我们公司的会员卡卡号规则里面就有一个“卡号遇4跳过”的选项。)我上Google简单搜了一下,发现都是硬编码的函数,虽然它们能解决具体的问题,但不够通用灵活,换个应用场景又需要重写代码。那有没有一种简单、通用又灵活的流水号生成器呢?今天就让我们一起来试试。流水号一般都是固定长度,由几部分组合而成:日期(如:20090101)常量代码(如:KA)数字序列(如:0001-9999)字母序列(如:A-Z)特殊字符(如:-)简单分析之后,我们先定义一个接口(Delphi):ISerialNumberGenerator1ISerialNumberGenerator =interface
2 functionNextSerialNumber(const serialNumber: string): string;
3 functionValidate(const serialNumber: string): Boolean;
4end
ISerialNumberGenerator接口主要有两个作用(职责):生成下一个可用的流水号(NextSerialNumber)验证某个流水号是否合法(Validate)OK,接下来我们先列个简单的任务列表:任务列表支持可循环的数字序列("001’-"999’)支持可循环的字母序列("A’-"Z’)支持常量代码("KA’)支持字母序列和数字序列组合(KA001A001)