2009-07-03 5 views
2

Если бизнес-объект содержит ссылку на другие объекты (как в поле id ссылается на другую запись базы данных) или должен иметь экземпляр фактических объектов.Должны ли бизнес-объекты содержать объекты или ссылки?

Например:

public class Company 
{ 
    public int Id { get; set; } 
    public CompanyStatus Status { get; set; } 
} 

или

public class Company 
{ 
    public int Id { get; set; } 
    public int Status { get; set; } 
} 
+0

Пожалуйста, обратите внимание на выбранный язык. – GregC

+0

Примеры показывают, что это C#. – Noldorin

+0

@ Энтони: не могли бы вы прояснить что-то? В чем разница между двумя вашими примерами? во втором - «Статус», который должен быть целочисленным внешним ключом в таблице состояния? –

ответ

9

С моей точки зрения, он должен содержать ссылки на интерфейсы, а не конкретные классы.

public class Company 
{ 
    public int Id { get; set; } 
    public ICompanyStatus Status { get; set; } 
} 

Предполагая, что конкретная реализация CompanyStatus в вашем примере была классом, а не перечислением.

+0

Я был очень доволен этим подходом в последние несколько лет. Возможно, это связано с тем, что он позволяет мне вводить зависимости (http://en.wikipedia.org/wiki/Dependency_injection) во время выполнения. – FOR

+0

@ Rake36: Почему ссылки на интерфейсы, а не на конкретные классы? –

+0

В некоторых случаях это предпочтительнее. Он позволяет заменять реализации и помогает с некоторыми технологиями ORM. В нем действительно делается упор на Контракт для бизнес-объекта. –

0

Если вы говорите о C#, то агрегирование объект означает, что вы храните ссылку на него.

0

Это зависит от данных. Некоторые данные должны храниться как копия исходного объекта, некоторые должны быть ссылкой.

+0

Возможно, вы могли бы уточнить, когда и где должны произойти два. –

4

При создании объектов бизнес-слоя в режиме OO вы должны использовать объекты напрямую.

В вашем примере int Status относится к идентификатору объекта CompanyStatus, хранящегося где-то? В этом случае, действительно, похоже, что это больше касается уровня данных. Обычно лучше избегать смешивания вашего уровня данных с вашим бизнес-слоем.

+0

Итак, я правильно понял, что DAL должен перевести CompanyId из базы данных в «CompanyStatus» или «ICompanyStatus», это правильно? –

+0

Yup, точно. И когда вы распадаетесь так, это дает вам немного больше возможностей для изменения ваших DAL и бизнес-уровней независимо. –

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