C# 为库存原型创建对象层次结构的最佳方法 1.项目数据库

C# 为库存原型创建对象层次结构的最佳方法 1.项目数据库,c#,oop,design-patterns,class-hierarchy,C#,Oop,Design Patterns,Class Hierarchy,我正在用c#做清单。通常我用python编写程序,这就是为什么我在使用静态类型c#时会遇到一些设计问题。因为缺乏实践 我已经创建了简单的项目数据库。我有一个普通类项目。它具有一般属性,如id,“name”。。。 并从Item类继承新类型的对象。例如武器物品。这是密码 项目1.cs public class Item { public string id; public string name; public string prefab; public string icon;

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

我已经创建了简单的项目数据库。我有一个普通类
项目
。它具有一般属性,如
id
,“name”。。。 并从
Item
类继承新类型的对象。例如
武器
物品。这是密码

项目1.cs

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

  public virtual string getTooltipText() {
    return "";
  }
}
武器系统

public class Weapon : Item {
  public int damage;

  public override string getTooltipText() {
    return "damage: " + damage;
  }
}
正如您每次需要创建新类型的对象时所看到的,我需要为
Item

我把所有的条目都加载到字典里,效果非常好

public Dictionary<string, Item> Items = new Dictionary<string, Item>();
我必须用零和空填充所有未使用的属性,以项目类型表示。 它很难看,我不喜欢这种创建InventoryItem类的方式

第二个想法 就像在我的物品数据库中一样,我可以为每种库存物品类型创建单独的类:库存武器、库存植物、库存咒语等

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

但我觉得我做错了什么。我在做双重工作。每次需要创建新类型的对象时,我都必须在项目数据库中创建新项目(例如
公共类工厂:项目
),并且必须创建新的InventoryItem(例如
公共类工厂:库存项目

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

最好的设计

或者我做错了什么

或者我认为每种类型的课程都是正确的盘点方式?

一个“最佳”的设计可能无法实现。你所能做的就是设计一些有用的东西,并努力让它变得更好

在确定组合或继承是否合适时,请考虑是否为a且是否具有a。
InventoryItem
是一个项目吗?或者它有一个项目

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

我在做双重工作

库存武器
库存物品
有何不同?是否只是因为它包含不同类型的项目?或者是否存在特定于该类型的属性和方法?您能否使用泛型(例如
InventoryItem
)来改进强类型和代码重用?是的,您可能最终会得到像
inventorywearm
这样的耦合类,但是如果这是一个比替代方案更好的设计,那么可能值得付出额外的努力

这类问题只能通过勾画出一个设计,看看什么可行,什么不可行,然后尝试不同的东西来回答。你不可能第一次就把事情做好,所以接下来的选择是努力完成你所拥有的,或者退后一步,做一些不同的事情

可能无法实现“最佳”设计。你所能做的就是设计一些有用的东西,并努力让它变得更好

在确定组合或继承是否合适时,请考虑是否为a且是否具有a。
InventoryItem
是一个项目吗?或者它有一个项目

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

我在做双重工作

库存武器
库存物品
有何不同?是否只是因为它包含不同类型的项目?或者是否存在特定于该类型的属性和方法?您能否使用泛型(例如
InventoryItem
)来改进强类型和代码重用?是的,您可能最终会得到像
inventorywearm
这样的耦合类,但是如果这是一个比替代方案更好的设计,那么可能值得付出额外的努力

这类问题只能通过勾画出一个设计,看看什么可行,什么不可行,然后尝试不同的东西来回答。你不可能第一次就把事情做好,所以接下来的选择是努力完成你所拥有的,或者退后一步,做一些不同的事情

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;
  ...
}