C# 将字符串集放入表示层

C# 将字符串集放入表示层,c#,nhibernate,oop,mapping,domain-driven-design,C#,Nhibernate,Oop,Mapping,Domain Driven Design,我们正在开发一个写在C#上的医院信息系统,并使用NHibernate将对象映射到数据库。MVC模式用于将业务逻辑与UI分离。问题是 如何将可变大小的不同字符串集添加到UI 例如,Contact对象有一个名为City的属性,用于保存哪个城市联系人居住。在该应用程序编写的国家,有80多个城市。你怎么能把这些城市写进一个组合框呢?(或数据网格、表格等)在本例中,城市编号是固定的。在很长一段时间内,没有必要再增加一个城市。(如果城市列表更改,则重新编译不是问题) 例如,Contact对象具有另一个名为F

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

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

例如,
Contact
对象有一个名为
City
的属性,用于保存哪个城市联系人居住。在该应用程序编写的国家,有80多个城市。你怎么能把这些城市写进一个组合框呢?(或数据网格、表格等)在本例中,城市编号是固定的。在很长一段时间内,没有必要再增加一个城市。(如果城市列表更改,则重新编译不是问题)

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

我有如下不同的解决方案

  • 在代码或设计器中静态写入组合框的所有字符串值
  • 从资源文件中获取值
  • 将这些值写入XML文件(实际上与上面相同,但无需重新编译)
  • 制作一个
    City
    对象,并使用NHibernate将值从
    City
    表中获取到一个列表中
  • 创建一个名为
    StringHolder
    的类,该类具有
    Type
    Value
    属性。所有字符串值(包括
    City
    FooBar
    )将只写入一个名为
    STRINGHOLDER
    的表中。然后使用NHibernate键“CITY”或“FOOBAR”获取这些值
  • 你会选择哪一个?或者你能给我推荐另一个吗


    谢谢大家

    我会投票支持解决方案4。在类似的情况下,我总是这样做。这似乎是一个更干净的解决方案。

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


    我指的是列出纽约所有雇员之类的东西。如果只是为了显示“死数据”,请选择需要最少工作量和最少风险的解决方案,这可能是文件选项。

    使用列表作为城市列表,您感觉如何?在DAL或BL中加载此字符串列表,然后将其传递到UI

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

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


    只有2美分。

    但城市只会有一根绳子。您认为它适合域模型吗?公共类City{private string{u name;public string name{get{return{u name;}set{{u name=value;}}}}如果我不使用继承,将会有很多这样的类。如果我使用继承,将会有很多空类,比如Contact、FooBar等。。你觉得呢?如果城市只是为了维持现状,而不去做任何其他事情,那么一张桌子可能就太过分了。但是,很多时候,一旦代码投入生产,您可能会发现它的新用途/需求。我个人使用查找表/域对象来查找城市(州、国家)等实体。解决方案#4将需要太多的时间来创建太多的实体。我想我们还是用#3,看看它是否有效。但正如我所说的,字符串值(而不是这些值的整数键)将在带有#3的数据库中占用太多空间。感谢againFor示例,添加到数据库中的每个联系人都有一个来自组合框的City和FooBar字段。所以在一些字符串集中,有些字符串值超过100个字符。对于每个联系人,都会添加一行,并且所有行只需要一个字段100个字符。如果我这样做,则会出现“规范化”问题。表中的大多数行将在FOOBAR字段上具有相同的值。如果我为每个字符串值集创建类,域设计将变得混乱:)两者都有优点和缺点。你说什么?我坚持我说的。理想情况下,您的域模型应该一点也不关心数据库的外观。顺便说一句,域类的外观应该与您希望代码的工作方式相同。但是如果您将城市存储在db中,我将进行规范化,并有一个单独的带有id的城市表。