通用的业务编码规则设计实现(三)

2014-11-23 22:06:32 · 作者: · 浏览: 3
SequenceName = "";
SequenceDelimiter = "";
Setp = 0;
CurrentNo = 0;
CurrentCode = "";
IsMultipleTenant = true;
row = new Dictionary();
}
}
复制代码
SequenceResetFactory.cs
复制代码
public class SequenceResetFactory
{
public static ISequenceReset CreateReset(string sequenceReset)
{
if (string.IsNullOrEmpty(sequenceReset))
return new NullSequenceReset();
var type = Assembly.GetExecutingAssembly().GetTypes()
.Where(t => t.GetInterface("ISequenceReset")!=null && t.Name.Equals(sequenceReset + "SequenceReset", StringComparison.CurrentCultureIgnoreCase))
.FirstOrDefault();
if (type == null)
throw new Exception(string.Format("无法创建重置依赖[{0}],找不到类{0}SequenceReset", sequenceReset));
return (ISequenceReset)Activator.CreateInstance(type);
}
}
复制代码
ISequenceReset.cs
public interface ISequenceReset
{
string Dependency(SequenceContext context);
}
DateSequenceReset.cs
复制代码
public class DateSequenceReset:ISequenceReset
{
public string Dependency(SequenceContext context)
{
return DateTime.Now.ToString("yyyyMMdd");
}
}
复制代码
NullSequenceReset.cs
复制代码
public class NullSequenceReset:ISequenceReset
{
public string Dependency(SequenceContext context)
{
return string.Empty;
}
}
复制代码
PaddingSide.cs
public enum PaddingSide
{
Left,
Right,
None
}
SequenceRuleFactory.cs
复制代码
public class SequenceRuleFactory
{
public static SequenceRuleBase CreateRule(string ruleName)
{
var type = Assembly.GetExecutingAssembly().GetTypes()
.Where(t => t.BaseType == typeof(SequenceRuleBase) && t.Name.Equals(ruleName + "SequenceRule", StringComparison.CurrentCultureIgnoreCase))
.FirstOrDefault();
if (type == null)
throw new Exception(string.Format("无法创建编码规则[{0}],找不到类{0}SequenceRule", ruleName));
return (SequenceRuleBase)Activator.CreateInstance(type);
}
}
复制代码
SequenceRuleBase.cs
复制代码
public abstract class SequenceRuleBase
{
public int PaddingWidth { get; set; }
public char PaddingChar { get; set; }
public PaddingSide PaddingSide { get; set; }
public string Ruleva lue { get; set; }
public SequenceRuleBase()
{
PaddingWidth = 0;
PaddingChar = char.MinValue;
PaddingSide = PaddingSide.None;
Ruleva lue = "";
}
public string Series(SequenceContext data)
{
var result = Handle(data);
result = result string.Empty;
if (PaddingSide == PaddingSide.Left && PaddingWidth > 0)
{
if (PaddingChar == char.MinValue)
throw new Exception(string.Format("取得Sequence[{0}]处理中未设置填充的字符", data.SequenceName));
result = result.PadLeft(PaddingWidth, PaddingChar);
}
else if (PaddingSide == PaddingSide.Right && PaddingWidth > 0)
{
if (PaddingChar == char.Mi