我正在用C#进行库存。通常我用python编写程序,这就是为什么我在使用静态类型的c#时遇到一些设计问题。由于缺乏实践。
我已经创建了简单的Item数据库。我开普通班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 "";
}
}
Weapon.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>();
并根据数据库文件中的项目类型创建项目类
现在,我想从问题的第一部分开始使用我的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;
...
}
而且我必须根据项目类型填充零并将所有未使用的属性设为空。这很丑陋,我不喜欢这种制作InventoryItem类的方式
就像在我的项目数据库中一样,我可以为每种库存项目类型创建单独的类:InventoryWeapon,InventoryPlant,InventorySpells等。
而且它看起来比BIG BOSS SINGLE InventoryItem类更好。
但是我感觉自己做错了。我正在做双重工作。每次我需要创建新类型的对象时,都必须在item数据库中创建新的Item(例如public class Plant : Item
),并且必须创建新的InventoryItem(例如public class InventoryPlant : InventoryItem
)
我的问题是:为库存原型创建对象层次结构的最佳方法?
最好的设计?
还是我做错了?
还是我对每种类型的班级的想法都是正确的库存方式?
“最佳”设计可能无法实现。所有你能做的就是设计一些作品,并尽量做到更好。
在确定组合或继承是否合适时,可以考虑是否是a和具有a。是 InventoryItem
物品吗?还是有东西?
如果您设计每种类型的项目彼此独立,那么它们是否共享可以由基类实现的公共属性?这是否使InventoryItem
通用性更高,所以您不需要InventoryWeapon
等等?
我正在做双重工作。
如何是InventoryWeapon
不是不同InventoryItem
?仅仅是因为它包含不同类型的项目吗?还是有特定于该类型的属性和方法?您可以使用泛型(例如InventoryItem<TItem>
)来改善强类型和代码重用吗?是的,您可能最终会遇到类似的耦合类InventoryWeapon
,但是如果它的设计比其他设计更好,那么可能值得付出额外的努力。
这些问题只能通过草拟设计,查看哪些有效,哪些无效以及尝试不同的方法来回答。您不会一开始就把它弄对,因此,选择是翻阅您拥有的内容,或者退后一步,做一些不同的事情。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句