将字符串集转换为表示层

时间:2008-10-20 12:52:46

标签: c# nhibernate oop mapping domain-driven-design

我们正在研究一个用C#编写的医院信息系统,并使用NHibernate将对象映射到数据库。 MVC模式用于将业务逻辑与UI分离。这是问题,

如何为UI添加可变大小的不同字符串集?

例如,Contact对象有一个名为City的属性,用于保存哪个城市联系人。在该应用程序编写的国家/地区有超过80个城市。你怎么能把这些城市写成一个组合框? (或数据网格,表格......)在此示例中,城市号码是固定的。没有必要长时间添加另一个城市。 (如果城市列表发生变化,重新编译不是问题)

例如,Contact对象具有另一个名为FooBar的属性,该属性将保存1000个不同的字符串值,并且将从该属性的组合框中选择这些值。如果用户需要,可以增加这个集合。如何使用这些值加载组合框? (如果字符串列表静态写入组合框对象,则重新编译是个问题)

我有以下不同的解决方案

  1. 在代码或设计器
  2. 中静态写入组合框的所有字符串值
  3. 从资源文件中获取值
  4. 将这些值写入XML文件(实际上与上面相同,但无需重新编译)
  5. 创建一个City对象,并使用NHibernate
  6. CITY表中获取值
  7. 创建一个名为StringHolder的类,其中包含TypeValue属性。所有字符串值(包括CityFooBar)都只会写在一个名为STRINGHOLDER的表中。并使用NHibernate的“CITY”或“FOOBAR”等键获取这些值。
  8. 你会选择哪一个?或者你能建议我另一个吗?

    全部谢谢

3 个答案:

答案 0 :(得分:1)

我会投票给解决方案#4。这就是我在类似情况下一直这样做的方式。这似乎是一个更清洁的解决方案。

答案 1 :(得分:0)

如果这些位置实际上将用于任何事情,请将它们带入数据库。如果数据“没有真正使用”,但提供了城市查找以使用户界面更好,那么XML文件选项也不是一个坏的方法。

通过使用,我的意思是列出所有在纽约的雇主和类似的东西。如果它是“死数据”,只是要显示,请选择需要最少工作量和最小风险的解决方案 - 这可能是文件选项。

答案 2 :(得分:0)

您对List< string>的使用感觉如何?获取城市列表?在DAL或BL中加载此字符串列表,然后将其传递给UI。

同样的解决方案也应该对FooBar值有益。

如果你有与City或FooBar相关联的ID,比如说NY和它在DB中的数字ID是1,那么你可以使用KeyValuePair< TKey,TValue>。使用泛型,您可以指定此KeyValuePair中的数据。城市名称或FooBar的字符串值可以是键,数字ID可以是值。

只需2美分。