The best way to create object hierarchy for inventory prototype
我正在用C#进行库存。通常我用python编写程序,这就是为什么我在使用静态类型的c#时遇到一些设计问题。由于缺乏实践。
我已经创建了简单的Item数据库。我有一个普通的课程
为了创建新的对象类型,我继承了
Item.cs
1 2 3 4 5 6 7 8 9 10 | public class Item { public string id; public string name; public string prefab; public string icon; public virtual string getTooltipText() { return""; } } |
Weapon.cs
1 2 3 4 5 6 7 | public class Weapon : Item { public int damage; public override string getTooltipText() { return"damage:" + damage; } } |
如您所见,每次我需要创建新类型的对象时,都需要创建为
我加载到字典的所有项目都很棒
1 |
并根据数据库文件中的项目类型创建项目类
2.问题部分。库存
现在,我想从问题的第一部分开始使用我的Item数据库创建一个清单。所有项目在用户库存中都具有常规属性。例如-物料数据库中物料的数量和参考。但是主要的问题是许多物品都有自己独特的统计数据。例如耐用性,速度,质量等。
如何设计库存物品?
第一个想法
第一个想法(很丑陋)是用所有类型的对象的所有统计信息创建BIG类
1 2 3 4 5 6 7 8 9 10 11 12 | 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; ... } |
而且我必须用零填充,并根据项目类型填充所有未使用的属性。
这很丑陋,我不喜欢这种制作InventoryItem类的方式
第二个主意
就像在我的项目数据库中一样,我可以为每种库存项目类型创建单独的类:InventoryWeapon,InventoryPlant,InventorySpells等。
而且它看起来比BIG BOSS SINGLE InventoryItem类更好。
但是我感觉自己做错了。我正在做双重工作。每次我需要创建新类型的对象时,都必须在项目数据库中创建新的Item(例如,
我的问题是:为库存原型创建对象层次结构的最佳方法?
最好的设计?
还是我做错了?
还是我对每种类型使用类的想法是正确的库存方式?
"最佳"设计可能无法实现。您所能做的就是设计一些可行的方法,然后尝试使其变得更好。
在确定组合或继承是否合适时,请考虑是否为a和具有a。
如果您设计每种类型的项目彼此独立,那么它们是否共享可以由基类实现的公共属性?这是否使
I am making double work.
这些问题只能通过草拟设计,查看哪些有效,哪些无效以及尝试不同的方法来回答。您不会一开始就把它弄对,因此选择是翻阅您拥有的内容,或者退后一步,做一些不同的事情。