为库存原型创建对象层次结构的最佳方式
The best way to create object hierarchy for inventory prototype
1。物品数据库
我正在用 C# 做库存。通常我用 python 编写程序,这就是为什么我在使用静态类型的 c# 时遇到一些设计问题。因为缺乏实践。
我创建了简单的项目数据库。我有一个将军classItem
。它具有一般属性,如 id
、'name'...
为了制作我从 Item
class 继承的新对象类型。例如 Weapon
项。这是代码
Item.cs
public class Item {
public string id;
public string name;
public string prefab;
public string icon;
public virtual string getTooltipText() {
return "";
}
}
Weapon.cs
public class Weapon : Item {
public int damage;
public override string getTooltipText() {
return "damage: " + damage;
}
}
如您所见,每次我需要创建新类型的对象时,我都需要创建新的 class 继承给 Item
我将所有项目加载到词典中,效果非常好
public Dictionary<string, Item> Items = new Dictionary<string, Item>();
并根据数据库文件中的项目类型创建项目class
2。问题部分。库存
现在我想使用这个问题第一部分的项目数据库创建一个清单。所有项目在用户清单中都具有通用属性。例如 - quantity 并从 Item 数据库引用 item。但主要问题是许多物品都有自己独特的统计数据。例如耐用性、速度、质量等
如何设计库存项目?
第一个想法
第一个想法(它很丑陋)是用所有类型的对象的所有统计数据创建大 class
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 class
的方式
第二个想法
就像在我的物品数据库中一样,我可以为每个库存物品类型创建单独的 class:InventoryWeapon、InventoryPlant、InventorySpells等
而且比BIG BOSS SINGLE好看InventoryItem class.
但是我感觉我做错了什么。我在做双重工作。每次我需要创建新类型的对象时,我都必须在项目数据库中创建新的 Item(例如 public class Plant : Item
)并且我必须创建新的 InventoryItem(例如public class InventoryPlant : InventoryItem
)
我的问题是:为库存原型创建对象层次结构的最佳方式?
最佳设计?
或者我做错了什么?
或者我对每种类型 class 的想法是进行库存的正确方法吗?
"best" 设计可能无法实现。你所能做的就是设计一些有效的东西,并努力让它更好。
在确定组合或继承是否合适时,请考虑是否 是一个 并且 有一个 。 InventoryItem
是一个项目吗?还是有项?
如果您设计的每种类型的项目彼此独立,它们是否具有可以通过基础 class 实现的共同属性?这是否使 InventoryItem
更通用,因此您不需要 InventoryWeapon
等?
I am making double work.
InventoryWeapon
与 InventoryItem
有何不同?仅仅是因为它包含不同类型的项目吗?或者是否有特定于该类型的属性和方法?您可以使用泛型(例如 InventoryItem<TItem>
)来改进强类型和代码重用吗?是的,您最终可能会得到像 InventoryWeapon
这样的耦合 classes,但如果它是比替代方案更好的设计,那么它可能值得付出额外的努力。
此类问题只能通过草拟设计、查看哪些有效、哪些无效并尝试不同的方法来回答。你不会第一次就把它做好,所以接下来的选择是用你拥有的东西来努力,或者退后一步,做一些不同的事情。
1。物品数据库
我正在用 C# 做库存。通常我用 python 编写程序,这就是为什么我在使用静态类型的 c# 时遇到一些设计问题。因为缺乏实践。
我创建了简单的项目数据库。我有一个将军classItem
。它具有一般属性,如 id
、'name'...
为了制作我从 Item
class 继承的新对象类型。例如 Weapon
项。这是代码
Item.cs
public class Item {
public string id;
public string name;
public string prefab;
public string icon;
public virtual string getTooltipText() {
return "";
}
}
Weapon.cs
public class Weapon : Item {
public int damage;
public override string getTooltipText() {
return "damage: " + damage;
}
}
如您所见,每次我需要创建新类型的对象时,我都需要创建新的 class 继承给 Item
我将所有项目加载到词典中,效果非常好
public Dictionary<string, Item> Items = new Dictionary<string, Item>();
并根据数据库文件中的项目类型创建项目class
2。问题部分。库存
现在我想使用这个问题第一部分的项目数据库创建一个清单。所有项目在用户清单中都具有通用属性。例如 - quantity 并从 Item 数据库引用 item。但主要问题是许多物品都有自己独特的统计数据。例如耐用性、速度、质量等
如何设计库存项目?
第一个想法
第一个想法(它很丑陋)是用所有类型的对象的所有统计数据创建大 class
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 class
的方式第二个想法
就像在我的物品数据库中一样,我可以为每个库存物品类型创建单独的 class:InventoryWeapon、InventoryPlant、InventorySpells等
而且比BIG BOSS SINGLE好看InventoryItem class.
但是我感觉我做错了什么。我在做双重工作。每次我需要创建新类型的对象时,我都必须在项目数据库中创建新的 Item(例如 public class Plant : Item
)并且我必须创建新的 InventoryItem(例如public class InventoryPlant : InventoryItem
)
我的问题是:为库存原型创建对象层次结构的最佳方式?
最佳设计?
或者我做错了什么?
或者我对每种类型 class 的想法是进行库存的正确方法吗?
"best" 设计可能无法实现。你所能做的就是设计一些有效的东西,并努力让它更好。
在确定组合或继承是否合适时,请考虑是否 是一个 并且 有一个 。 InventoryItem
是一个项目吗?还是有项?
如果您设计的每种类型的项目彼此独立,它们是否具有可以通过基础 class 实现的共同属性?这是否使 InventoryItem
更通用,因此您不需要 InventoryWeapon
等?
I am making double work.
InventoryWeapon
与 InventoryItem
有何不同?仅仅是因为它包含不同类型的项目吗?或者是否有特定于该类型的属性和方法?您可以使用泛型(例如 InventoryItem<TItem>
)来改进强类型和代码重用吗?是的,您最终可能会得到像 InventoryWeapon
这样的耦合 classes,但如果它是比替代方案更好的设计,那么它可能值得付出额外的努力。
此类问题只能通过草拟设计、查看哪些有效、哪些无效并尝试不同的方法来回答。你不会第一次就把它做好,所以接下来的选择是用你拥有的东西来努力,或者退后一步,做一些不同的事情。