【发布时间】:2013-10-02 22:07:30
【问题描述】:
我有一个 OO 设计/数据库问题。我正在使用实体框架 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”属性的赛车。
遵循良好的面向对象设计原则:
问题 1: 这些都应该在单独的类中还是与修饰符合二为一。 从面向对象的角度来看原则的分离,我会说将它们分开。此外,封闭/开放原则规定它们应该分开,这将有助于我稍后添加赛车,而不必更改任何关于公共汽车、卡车等的东西。
问题 2: 它们都应该在同一个数据库表中吗?尽管我不认为类的数量应该决定表的数量,但我仍然会选择单独的表,以便对数据库进行规范化并且到处都没有未使用的字段。默认情况下,代码优先将所有内容放在一个表中,但我已将其与类模式属性分开。
问题 3: 如果我应该对接口而不是具体类进行编程(再次是 OO 原则),这将如何工作,因为如果我有类似 ICar 的东西由具体类 car 实现,那么将内容转换为 ICar 将不起作用。像 List 这样的东西不会给我所有正确的数据。将 MVC 视图实现到接口 ICAR 也很困难。
我什至应该将接口放在仅属性类上吗?我应该在这里使用存储库之类的东西还是其他一些模式/想法?
对于这个冗长的问题,我深表歉意,感谢您的帮助。 提前致谢。 迈克
【问题讨论】:
-
您应该使用更通用的东西,而不是使用“汽车”,例如“WheeledVehicle”既不是卡车也不是公共汽车。
-
更不用说看到
public class Motorcycle : Car会很奇怪 -
是的,这是一个错误的命名选择,仅用于说明目的。
标签: c# asp.net-mvc oop database-design