2014-12-04 127 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