English 中文(简体)
将字符串集合带入表示层
原标题:
  • 时间:2008-10-20 12:52:45
  •  标签:

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

你如何将大小可变的不同字符串集合传输到UI?

例如,一个联系人对象有一个名为城市的属性,它保存联系人居住的城市。在应用程序所写的国家中有80个以上的城市。您如何将这些城市写入组合框(或数据网格、表格等)?在这个例子中,城市数量是固定的。很长时间内不需要添加另一个城市。(如果城市列表发生变化,重新编译不是问题)

例如,一个联系人对象有另一个名为FooBar的属性,它将包含1000个不同的字符串值,并且这些值将从一个组合框中选择。如果用户需要,这个集合可以继续增长。如何加载这些值到组合框中?(如果字符串列表静态地写入组合框对象,重新编译就成为了一个问题)

我有以下不同的解决方案。

  1. All string values statically written to combo box in code or designer
  2. Get the values from a resource file
  3. Write those values to an XML file (Actually same as above, but no need to recompile)
  4. Make a City object and get the values into a list from CITY table with NHibernate
  5. Make a class named StringHolder which has a Type and Value property. All string values(including City and FooBar) would be written in just one table named STRINGHOLDER. And get those values with a key like "CITY" or "FOOBAR" with NHibernate.

你会选择哪一个?或者你能给我推荐另一个吗?

谢谢大家 (xièxiè dàjiā)

最佳回答

如果位置确实会被用于任何用途,请将它们添加到数据库中。如果数据“并没有真正被使用”,但提供了城市查找以使用户界面更好,则XML文件选项也不失为一种不错的选择。

我所说的使用是指像“列出所有在纽约的员工”之类的东西。如果这些数据是“无用数据”,只需用于显示,则应选择需要最少工作量和最小风险的解决方案 - 这可能是文件选项。

问题回答

我会投票支持第四种方案。在类似的情况下,我一直是这样做的。它似乎简洁明了。

你认为在城市列表中使用List<string>如何?将这个字符串列表加载到你的DAL或BL中,然后将其传递到UI。

相同的解决方案也适用于FooBar值。

如果您有与城市或FooBar相关联的ID,例如纽约,其在数据库中的数字ID为1,则您可以使用KeyValuePair<TKey,TValue>。使用泛型,您可以控制哪些数据放入此KeyValuePair中。城市名称或FooBar s字符串值可以是键,数字ID可以是值。

只是两美分。





相关问题
热门标签