代码之家  ›  专栏  ›  技术社区  ›  derdo

在这个生产计划示例中,使用dictionary<enum,object>的方法是否正确?

  •  2
  • derdo  · 技术社区  · 15 年前

    考虑使用许多产品的生产计划应用程序。每个产品都有一个inventoryControlType上键控的inventoryControl对象列表。根据我们为生产计划运行的算法,我们需要访问给定产品的不同类型的InventoryControl对象。这行得通。然而,今天我需要介绍一个inventorycontrol中的字段,它保存inventorycontroltype,因为在我们的算法中,我们需要了解inventorycontroltype。

    但是,我觉得我做错了什么,因为看起来我在重复数据。

    你觉得这个设计合适吗?有什么改进的想法吗?

    class Product{
        Dictionary<InventoryControlType, InventoryControl> InventoryControls;
        GetInventoryControl(InventoryControlType type){
            return InventoryControls[type];
        }
    }
    
    class InventoryControl{
        InventoryControlType controlType;
        float limit;
        float cost; 
        ...
        CalculateCost(){...}
        GetConstraint(){...}
    }
    
    4 回复  |  直到 15 年前
        1
  •  6
  •   Dan Tao    15 年前

    我觉得你很好。使用对象的唯一属性作为键是完全正常的(至少在我的经验中是这样),无论它是在 Dictionary A DataTable 或者你有什么。

    例如,在我自己的工作中,我们的主要项目具有一个名为 Product 属性名为 Symbol 并且应用程序维护 词典 打电话 Products 与每个 产品 对象的 符号 作为其密钥的属性。

    这样想:如果您有一个数据库有两个表,一个表按键引用另一个表中的行,那么您可能会感觉到您在两个地方有相同的数字(键),您在“复制”数据。但这不是重复,而是参考。这同样适用于您的场景。

        2
  •  2
  •   Brisbe    15 年前

    我看不出它有什么本质上的问题。它在复制一条信息,但情况确实需要它。您可以使用普通的集合而不是字典——但是由于您的主要目标是根据其inventoryControlType查找一条信息,因此使用此实现的字典似乎是最正确的。

        3
  •  2
  •   Jon Limjap    15 年前

    我认为这对一个 Dictionary<TKey, TValue> 用例。

    很多时候字典对象都会从值对象中得到某种冗余信息,其中最常见的是ID,例如。 Dictionary<int, SomeObject> 其中int是从someobject.id获取的值——在这方面是有意义的,它与您的用例完全相同。

        4
  •  2
  •   devlord    15 年前

    这实际上取决于字典的大小,因为对于非常大量的数据,我认为使用键在字典上查找可能更快。但是,如果您没有非常大量的数据,那么可以使用LINQ和通用列表。例如:

    class Product{
    List<InventoryControl> InventoryControls;
    GetInventoryControl(InventoryControlType type){
        return InventoryControls.First(x => x.ControlType == type);
    }
    

    我建议运行一些单元测试基准来查看是否需要字典。