【发布时间】: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;
...
}
我必须用 zero 和 null 填充所有未使用的项目类型的属性。 这很难看,我不喜欢这种制作 InventoryItem 类的方式
第二个想法
就像在我的物品数据库中一样,我可以为每个库存物品类型创建单独的类:InventoryWeapon、InventoryPlant、InventorySpells 等。
而且它看起来比 BIG BOSS SINGLE InventoryItem 类更好。
但我感觉我做错了什么。我正在做双重工作。每次我需要创建新类型的对象时,我都必须在项目数据库中创建新的 Item(例如 public class Plant : Item)并且我必须创建新的 InventoryItem(例如例如public class InventoryPlant : InventoryItem)
我的问题是:为库存原型创建对象层次结构的最佳方式是什么?
最好的设计?
或者我做错了什么?
或者我对每种类型的类的想法是做库存的正确方法?
【问题讨论】:
标签: c# oop design-patterns class-hierarchy