我有一个面向对象设计/数据库的问题。我正在使用实体框架 5 在 Microsoft MVC v4 中进行编码。假设模型如下:
public class Car
{
public int Id {get; set;}
public string Name {get; set; }
public int Wheels {get; set;}
}
public class Truck : Car
{
public int CargoCapacity {get; set;}
}
public class Bus : Car
{
public int PassangerCapacity {get; set;}
}
在稍后阶段,我可能想要扩展模型,因此必须考虑这一点。例如:添加具有“NumberOfTurbos”属性的赛车。
遵循良好的 OO 设计原则:
问题 1: 这些都应该在单独的类中还是与修饰符合二为一。从面向对象的角度来看原则的分离,我会说将它们分开。此外,封闭/开放原则规定它们应该分开,这将有助于我稍后添加赛车,而不必改变任何关于公共汽车、卡车等的东西。
问题2: 它们应该都在同一个数据库表中吗?尽管我不认为类的数量应该决定表的数量,但我仍然会选择单独的表,以便对数据库进行规范化并且到处都没有未使用的字段。默认情况下,代码优先将所有内容放在一个表中,但我已将其与类模式属性分开。
问题 3: 如果我应该对接口而不是具体类进行编程(再次是 OO 原则),这将如何工作,因为如果我有像 ICar 这样由具体类 car 实现的东西,那么将东西转换为 ICar 将不起作用. 像 List < ICar > 这样的东西不会给我所有正确的数据。将 MVC 视图实现到接口 ICAR 也很困难。
我什至应该将接口放在仅属性类上吗?我应该在这里使用存储库或其他一些模式/想法吗?
为这个冗长的问题道歉,我很感激任何帮助。提前致谢。麦克风