我的问题如下:我有产品,需要其他产品才能生产。例如,要制作船,您需要X木材和Y铁。我必须以某种方式表示依赖关系和产品。我需要能够显示一些储存中有多少木材以及建造船只需要多少木材。
所以我的第一个想法是创建一个大的枚举Products
,然后我可以构建像Dictionary<Products, int> RequiredProducts
或Dictionary<Products, int> StoredProducts
这样的词典。然而,可能会有很多产品,并且用大约50个字段制作枚举感觉设计不好。而且,我可能需要有关每种产品的更多信息,例如其图形表示,所需技术等。
使用某些类层次结构会好得多,但如果我创建一个抽象类Product,然后从中派生出来,我将如何表示所需的产品? Dictionary<Product, int>
无法做到,因为现在我需要一个产品实例来向字典中添加内容。我使用的语言是C#。
答案 0 :(得分:1)
答案 1 :(得分:0)
如果我正确地理解了这个问题,我建议你在你的内部使用同一个类。您将拥有以下代码:
public class Product
{
public virtual ICollection<Material> RequiredMaterials {get; set;}
...
}
如果您不打算像往常一样使用RequiredProducts产品,可以为此目的创建一个单独的类:
public class LightProduct
{
public int Id { get; set; }
public string Name { get; set; }
}
如果它没有解决您的问题,请告诉我,我会尽力帮助您。
更新:您可以为您的产品制作轻量级代理类,并仅在您需要时填写它。例如:
use Rack::Session::Cookie, key: 'rack.session',
domain: 'mydomain.com',
path: '/',
expire_after: 2592000,
secret: ENV['SESSION_SECRET']
因此它将与您数据库中的实际产品相关,并且您的记忆力不会被淹没。
我不建议在这种情况下使用反射,因为这会显着降低应用程序这一部分的性能。
如果在已填写字典的情况下更改了产品名称,则包含包含产品名称的字典的方法可能会出现问题。我会考虑采用其他方法。
答案 2 :(得分:0)
也许如此:
using System;
using System.Collections.Generic;
public partial class Product
{
public Product()
{
this.ProductRecept = new HashSet<ProductRecept>();
}
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<ProductRecept> ProductRecept { get; set; }
}
public partial class Material
{
public Material()
{
}
public int Id { get; set; }
public string Name { get; set; }
}
public partial class ProductRecept
{
public int Id { get; set; }
public int ProductId { get; set; }
public int MaterialId { get; set; }
public decimal Qu { get; set; }
public virtual Product Product { get; set; }
public virtual Material Material { get; set; }
}