2010-06-23 71 views
1

在其中一个金融Winform项目中,应用程序代码必须使用诸如货币等值。在代表商业实体的对象模型中,有些字段需要保存诸如美元,欧元等货币值。该字段的值集合很可能会被限制为其中一种标准货币,并且很少需要扩大新的货币。应用程序从GUI控件获取货币输入,该控件将来自另一个标准源的这些值并显示为下拉列表,尽管用户可能直接向控件输入值。应用程序的逻辑并不特别依赖于货币的值,并且不直接对这些字段执行特殊处理,这需要引用字段中包含的实际值。枚举设计指南

现在问题:是否建议使用枚举,枚举USD,EUR等类似的值,以便接收到的代码中的货币值可以通过枚举进行验证?如果不是,建议将货币值从下拉列表中输入,以便在代码中不需要额外的验证?

回答

0

我建议你创建一个简单的类或事件结构为货币,同时也创造了当前定义的货币几个静态只读成员:

class Currency 
{ 
    public static reaonly IEnumerable<Currency> Currencies = new List<Currency> 
    { 
     new Currency { Name = "USD", CurrencySign = "$" }, 
     new Currency { Name = "EUR", CurrencySign = "€" } 
    } 

    public string Name {get; private set;} 

    public string CurrencySign {get; private set;} 

    public override ToString() { return Name; } 
} 

它可以让你轻松扩展货币名单,并从其他地方提取它然后静态成员,如数据库或Web服务,而不用重新调整应用程序。

0

如果代码没有处理货币值,并且以后可以添加新货币值,那么我会将货币值编码为(数据)字符串而不是(硬编码)枚举值。

0

由于您有一组有限且固定的可能值,枚举或预填充下拉比允许用户输入自己的值要好。 (枚举可能更有效,因为如果您的货币少于256种,它可以存储在一个字节中)。另一种方法(如果您设想有一天可能需要添加另一种货币)将从XML配置文件或数据库表中填充一个驱动器,以便它是数据驱动的并且容易扩展(而不是需要重建应用程序以支持新货币)

如果您计划对代码进行模糊处理 - 一旦处理了密码,您就无法将枚举值转换为文本(因为它们将会“混乱”),因此请小心使用枚举类型你不能再使用反射来在枚举值和文本之间进行转换(用于将UI控件和/或序列化填充为文本格式)

0

IMO你应该使用允许的值创建一个枚举并验证输入。原因是因为你可能有一个下拉式界面,但没有什么能够阻止其他界面使用简单的文本输入。