The*_*igC 1 c# inheritance object
我试图找出建立这个模型的最佳方法.我几乎是这样做的,但我正在考虑采取另一种方式.这是一次学习经历,所以浪费时间并不重要.
namespace FirstWay
{
public class CrateOfBags
{
public string crateId { get; set; }
public string originCountry { get; set; }
public List<BagOfApples> bagList { get; set; }
}
public class BagOfApples
{
public double weight { get; set; }
public string bagId { get; set; }
public List<apple> appleList { get; set; }
}
public class apple
{
public string appleId { get; set; }
public string color { get; set; }
public Boolean rotten { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
//或这个
namespace SecondWay
{
public class CrateOfBags
{
public string crateId { get; set; }
public string originCountry { get; set; }
}
public class BagOfApples : CrateOfBags
{
public string bagId { get; set; }
public double weight { get; set; }
}
public class apple : BagOfApples
{
public string appleId {get;set;}
public string color { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
}
可能的问题
Apple问题:已交付多少烂苹果?哪个袋子和/或哪个板条箱腐烂的苹果来自哪里?第一种方式:可以循环每个箱子,然后包,然后苹果和计数.第二种方式:可以通过苹果循环并将父属性添加到HashSet(一种方法来防止重复)
箱子问题.查找每个国家/地区的箱子数量?第一种方式:只通过板条箱并保留计数列表,数组等等.第二种方式:必须循环所有苹果,只关心板条箱.
我遇到的一个问题是我对苹果作为自己的实体知之甚少.我只知道它来自箱子的foreach循环来自哪个箱子
但是,如果我想问一个问题,例如"特定批次中有多少青苹果(通过id)?" 我也有问题取决于方式.
我说苹果是一个袋子的孩子似乎很尴尬,就像狗是动物的孩子一样.然而,我喜欢能够自由移动操纵苹果的想法,例如通过更改父属性bagid来切换它们所处的袋子.我不是在寻找特定问题的解决方案,只要其中一个更好(更灵活,更有效,更直观)然后另一个,或者如果我完全缺少某些东西,比如使用其他技术.非常感谢.
PS这不是真正的模型,而是一种相当不错的表现形式.
从数据建模的角度来看,第二种方法显然是错误的:苹果不是 BagOfApples.继承是应该创建可替代性:你能不能总是把其中BagOfApples预计苹果吗?我不这么认为.这是Liskov替换原则(并且它被违反).
在数据库术语中,第二个模型是非规范化的.它可以通过将所有3个表连接在一起从第一个模型创建,从而创建冗余数据.这是一种反模式,因为当您更改某些内容时,您必须在多个位置更改它(如果您忘记了它是静默数据损坏).
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |