2012-05-11 2 views
1

У меня есть класс, ниже которого написано для отображения с сообщением об ответе веб-службы.Лучшая практика или шаблон для объектов DTO/Domain

public class someclassA 
{ 
    public int properyA {get;set;} 
    public int properyB {get;set;} 
    public int properyC {get;set;} 
    public int properyD {get;set;} 
} 

public class someclassB 
{ 
    public int properyX {get;set;} 
    public int properyY {get;set;} 
    public int properyZ {get;set;} 
} 

В настоящее время требование состоит в том, что someClassA должны использовать некоторые свойства из someClassB и добавить еще 3 свойства, например Процент от propertyE, propertyF, propertyG и т. д.

Вопрос, касающийся шаблона, должен ли я создать совершенно другой someClassAB, чтобы иметь все свойства от someClassA и 3 новых или мне нужно просто построить someClassA со всем этим аддитивным полем в первую очередь?

Cheers.

+2

Если все свойства в B также существуют в A, это, вероятно, лучше всего использовать с помощью наследования. – lsuarez

+0

Согласен с lthibodeaux. Шаблоны должны сделать нашу жизнь проще. Да DTO должен быть простым объектом с простыми свойствами, но это лучшее решение для вас, я думаю, –

+0

Вопрос обновлен, свойства в классе B полностью чужды классу –

ответ

2

Вот правило, о котором следует помнить. Если A "является" B, то используйте наследование. В противном случае сделайте их отдельными объектами. Наследование следует использовать только в тех случаях, когда подкласс действительно является более конкретной формой родительского класса.

Думайте о техническом обслуживании. Что происходит, когда объекты начинают расходиться все больше и больше в будущем? Теперь вы используете типы, в которых говорят только 20% свойств в данном контексте.

Не говоря уже о том, что ваш код будет более читабельным, если у вас есть четкие границы между несвязанными объектами. Каждый раз, когда вы бросаете наследование в изображение, у вас есть еще один «контекст», который вам нужно не отставать при чтении кода. Если вы смешиваете объекты (откровенно из лени), читаемость читается.

+0

, если есть еще один класс, который содержит все свойства ClassA и дополнительные свойства, необходимые для просмотра, тогда ? –

+0

Это зависит от того, каковы ваши сущности на самом деле. Вы можете идти в любом случае. Если B - другой тип A, то я бы использовал наследование. Если они не имеют отношения друг к другу, создайте отдельный объект. Не используйте наследование только для «заимствования» свойств. –

+0

Теперь, если класс B является «представлением» класса A с некоторыми вычисленными полями, я был бы склонен помещать их как свойства getter в класс A (поскольку представление все еще одного типа). –

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