【问题标题】:The best way to create object hierarchy for inventory prototype为库存原型创建对象层次结构的最佳方法
【发布时间】:2016-05-03 12:45:02
【问题描述】:

1。项目数据库

我正在用 c# 做库存。通常我用python编写程序,这就是为什么我在静态类型的c#中遇到一些设计问题。因为缺乏实践。

我已经创建了简单的项目数据库。我有一个普通班Item。它具有一般属性,如id、'name'... 为了制作新类型的对象,我从 Item 类继承。例如Weapon 项目。这是代码

Item.cs

public class Item {
  public string id;
  public string name;
  public string prefab;
  public string icon;

  public virtual string getTooltipText() {
    return "";
  }
}

武器.cs

public class Weapon : Item {
  public int damage;

  public override string getTooltipText() {
    return "damage: " + damage;
  }
}

正如您所见,每次我需要创建新类型的对象时,我都需要创建为Item 继承的新类

我加载到字典中的所有项目都很棒

public Dictionary<string, Item> Items = new Dictionary<string, Item>();

并根据数据库文件中的项目类型创建项目类

2。问题部分。库存

现在我想使用本问题第一部分中的项目数据库创建一个库存。所有项目在用户库存中都有一般属性。例如 - quantity 并引用 Item 数据库中的 item。但主要问题是许多物品都有自己独特的统计数据。例如耐用性速度质量

如何设计库存项目?

第一个想法

第一个想法(而且很丑)是为所有类型的对象创建包含所有统计信息的 BIG 类

public class InventoryItem {
  //main properties
  public Item item;
  public int quantity;

  //all properties for all other items
  public int durability;
  public int speed;
  public string quality;
  public string magic;
  ...
}

我必须用 zeronull 填充所有未使用的项目类型的属性。 这很难看,我不喜欢这种制作 InventoryItem 类的方式

第二个想法

就像在我的物品数据库中一样,我可以为每个库存物品类型创建单独的类:InventoryWeaponInventoryPlantInventorySpells 等。

而且它看起来比 BIG BOSS SINGLE InventoryItem 类更好。

但我感觉我做错了什么。我正在做双重工作。每次我需要创建新类型的对象时,我都必须在项目数据库中创建新的 Item(例如 public class Plant : Item)并且我必须创建新的 InventoryItem(例如例如public class InventoryPlant : InventoryItem)

我的问题是:为库存原型创建对象层次结构的最佳方式是什么?

最好的设计?

或者我做错了什么?

或者我对每种类型的类的想法是做库存的正确方法?

【问题讨论】:

    标签: c# oop design-patterns class-hierarchy


    【解决方案1】:

    可能无法实现“最佳”设计。你所能做的就是设计一些有效的东西,并尝试让它更好

    在确定组合或继承是否合适时,请考虑是否是一个有一个InventoryItem 是一个项目吗?还是它有一个项?

    如果您设计的每种类型的项目彼此独立,它们是否共享可由基类促进的共同属性?这是否使InventoryItem 更通用,因此您不需要InventoryWeapon 等?

    我正在做双重工作。

    InventoryWeaponInventoryItem 有何不同?仅仅是因为它包含不同类型的项目吗?或者是否有特定于该类型的属性和方法?你可以使用泛型(例如InventoryItem&lt;TItem&gt;)来改进强类型和代码重用吗?是的,您最终可能会得到像 InventoryWeapon 这样的耦合类,但如果它的设计比替代方案更好,那么可能值得付出额外的努力。

    这类问题只能通过勾勒出设计草图,看看哪些可行哪些不可行,并尝试不同的方法来回答。你不会第一次就做好,所以选择是用你所拥有的东西耕耘,或者退后一步,做一些不同的事情。

    【讨论】:

      猜你喜欢
      • 2014-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多