【问题标题】:Class design best way to handle multi-value options and the selected value?类设计处理多值选项和选定值的最佳方式?
【发布时间】:2015-05-13 17:07:36
【问题描述】:

设计一个(或多个)可以保存项目潜在值以及用户实际选择的类的最佳方法是什么?我以前遇到过这个问题,并且总是觉得我缺少核心类设计功能。

现在我通常会做如下的事情

class MultiChoice
    Name (I.e. Box Size)
    Default Value ("22x15")
    PotentialValues ({"10x10","20x20","22x15"})

但这并不能处理用户选择的实际值,所以我将其添加进去。

class MultiChoice
    Name (I.e. Box Size)
    Default Value ("22x15")
    PotentialValues ({"10x10","20x20","22x15"})
    SelectedValue

但这感觉不对,因为当我构建一个下拉列表时,我正在用SelectedValue = null 填充内容。然后当我存储数据时,我也存储了所有我不需要的选项。

有没有更好的方法通过接口或其他语言结构来处理这个问题?我总觉得我在这里遗漏了一些明显的东西。

【问题讨论】:

  • 我投票决定将此问题作为题外话结束,因为设计级别的问题属于程序员。
  • 快来写一些至少可以编译的真实代码吧。当您存储数据时,是什么迫使您存储所有选项?对初始 SelectedValue 使用默认值有什么问题?
  • 抱歉,我还是新手。我如何将其提交给程序员?至于写代码,我还没有写,因为我还在纸上设计。我当然可以用 C# 编写整个课程并将其发布在这里,但在我看来,这似乎使问题变得混乱。
  • @user2283020 您将问题提交给程序员的方式与您在此处提交的方式完全相同,您转到该站点,单击“提出问题”,然后提出您的问题。
  • @Servy 在推荐其他网站时,指出cross-posting is frowned upon 通常会有所帮助

标签: c# class drop-down-menu interface


【解决方案1】:

这里确实有两个独立的实体:

  • 多选题
  • 多选答案

创建两个单独的类来表示这两个单独的概念。

【讨论】:

    【解决方案2】:

    ASP.NET MVC 有 SelectList 类。虽然您可能实际上并未在 ASP.NET MVC 中工作,但很明显,Microsoft 认为“下拉菜单的支持类”的概念足够普遍,足以保证它自己的类。

    无论您认为“模型”是什么(程序中包含业务领域类和业务逻辑的那部分),总会存在用作这些下拉列表查找的数据库表。

    tblCountries
         CountryID     PK
         CountryCode   string
         FullName      string
    

    在您的 ViewModel 中,将有一个相应的国家/地区列表,您可以从中填充下拉列表:

    public class InvoiceViewModel
    {
        ...
        public int CountryID { get; set; }
    
        public SelectList Countries { get; set; }
        // or
        public List<Country> Countries { get; set; }
    
        ...
    }
    

    当然,当您进入 UI 时,实际的下拉列表包含足够的管道来容纳选择列表和所选值。

    【讨论】:

      【解决方案3】:

      您真的只需要一个 Value 字段。在构造函数中将其设置为您想要的任何内容(因此在创建对象时默认设置)。您还可以将您的“潜在价值”更改为静态的,这样整个班级都是一样的。

      public class Box
          {
              public string Value { get; set; }
              public static List<string> AllowedValues { get; private set; }
      
              public Box()
              {
                  AllowedValues.AddRange(new string[]{"10x10","20x20","22x15"});
                  Value = AllowedValues.First();
              }
          }
      

      然后当用户更改值时,只需更新它。

      Box thisBox = new Box();
      string val = "22x15";
      if (Box.AllowedValues.Contains(val))
          thisBox.Value = val;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-18
        • 2014-10-22
        • 2010-09-20
        • 2010-09-11
        相关资源
        最近更新 更多