2014-12-04 95 views
0

以下数据场景开发我的应用程序的最佳方式是什么?构建此项目的最佳方式

为了简单起见,我的模型有一个称为项目与标准共同领域,专案编号,名称,起始日期为基表,所有者等

它与该保持数据的其他表一比一的关系不同的项目类型,例如ConstructionProject,FinanceProject,HolidayProject等。这些表中的每一个都通过主键ProjectId链接到基本Project表。

如果我的课是基于一个基类项目和其他类从这个继承? 如:

public class Project 
{ 
    public int ProjectId { get; set; } 
    public string Name { get; set; } 
    public DateTime StartDate { get; set; } 
    public string Owner { get; set; } 
} 

public class ConstructionProject : Project 
{ 
    public string Location { get; set; } 
    public string Contractor { get; set; } 
} 

或者我应该有其他类型的项目作为自己的类项目的对象? 例如:

public class ConstructionProject 
{ 
    public Project Project { get; set; } 
    public string Location { get; set; } 
    public string Contractor { get; set; } 
} 

作为一个标准的MVC项目,然后我就可以有控制器处理CRUD操作的第二个方案上面这样的:

public ActionResult Update(Project project) 
{ 
    // update project object 
} 

public ActionResult Update(ConstructionProject constructionProject) 
{ 
    // update constructionProject object 
    // update project object 
} 

不知道控制器会是什么样处理继承第一种情况下的对象?

该项目是一个使用实体框架的标准C#MVC项目。对于不同的项目类型,可能会有多个链接表。 那么哪个选项是最佳实践,以及如何建模控制器(如果与我建议的方式不同) 或者还有更好的方法吗?

感谢

编辑 - 只是为了增加一些更多的信息 - 基类也可以存在于它自己的,而不是仅仅是一个基类,换句话说,该项目表可以有没有相关记录记录在其他表中,如果有帮助?

+0

使用类似于第一个选项的东西 - 防止重复工作 - 允许轻松扩展。 – user1666620 2014-12-04 14:30:44

+0

从一个数据库一点上,我会选择第二个选项 – Marthijn 2014-12-04 14:32:40

+0

参见:如何决定使用是否属于或有关系(http://stackoverflow.com/questions/6395366/how-to-decide-whether -use-is-a-or-has-a-relation) – Corak 2014-12-04 14:37:30

回答

2

这是一个常见的问题,它有一个共同的答案。继承或组成。那么回答是:如果A is B那么A inherits B,否则A uses B。例如,cat is animaltable has an array of four legs and one board

在你的情况下,它似乎是第一个选项。

+0

我更喜欢“聚合”而不是“引用”/“使用”,因为它更精确。用途如此普遍。我也听说过“IS A”与“HAS A”的比较。 – helb 2014-12-04 14:38:16

+0

@helb我更喜欢'usage',所以我编辑了我的答案 – 2014-12-04 14:39:15

+0

什么?一个'table' *有*四条腿,可能*表示*通过一个'array'。 – Corak 2014-12-04 14:40:48