C# 为库存原型创建对象层次结构的最佳方法 1.项目数据库
我正在用c#做清单。通常我用python编写程序,这就是为什么我在使用静态类型c#时会遇到一些设计问题。因为缺乏实践 我已经创建了简单的项目数据库。我有一个普通类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;
项目
。它具有一般属性,如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;
...
}