2014-12-04 4 views
0

Каков наилучший способ разработки моего приложения со следующим сценарием данных?Лучший способ архитектовать этот проект

Для простоты, моя модель имеет базовую таблицу под названием Project со стандартными общими полями, ProjectID, имя, STARTDATE, владелец и т.д.

Это имеет отношение один к одному с другими таблицами, которые поддерживают данные различные типы проектов, например, 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 с использованием Entity Framework. Для разных типов проектов потенциально может быть несколько связанных таблиц. Итак, какой вариант является наилучшей практикой и как будут моделироваться контроллеры (если они отличаются от того, как я предлагаю?) Или есть лучший способ?

Благодаря

Edit - просто добавить еще некоторую информацию - базовый класс также может существовать на своем собственном, а не быть просто базовый класс, другими словами, таблица проекта может иметь записи, которые не были связаны записи в других таблицах, если это помогает?

+0

использовать что-то вроде первого варианта - предотвращает дублирование усилий - позволяет легко расширяемость. – user1666620

+0

С точки зрения базы данных я бы выбрал вторую опцию – Marthijn

+0

См. Также: [Как решить, использовать ли IS A или A A Relation] (http://stackoverflow.com/questions/6395366/how-to-decide-whether -use-is-a-or-has-a-relation) – Corak

ответ

2

Это распространенный вопрос, и он имеет общий ответ. Наследование или состав. Хорошо ответ: если A is B, то A inherits B, иначе A uses B. Например, cat is animal, но table has an array of four legs and one board

В вашем случае это первый вариант.

+0

Я предпочитаю «агрегацию» над «ссылкой»/«использование», потому что это более точно. Использование настолько универсально. Я также слышал о сравнении «IS A» и «HAS A». – helb

+0

@helb я предпочитаю 'использование', поэтому я отредактировал свой ответ соответственно –

+0

Что? «Таблица» * имеет четыре ноги и может * представлять *, что через «массив». – Corak

Смежные вопросы