2013-11-12 2 views
1

У меня есть перечисление в моем бизнес-объекте.DTO не должен знать перечисление внутри бизнес-объекта

Это перечисление, хотя определено в объекте передачи данных.

dto enum не относится к типу бизнес-объекта, потому что он не должен знать друг друга.

Когда я получаю это dto от клиента и сопоставляю dto с бизнес-объектом и вставляю данные в базу данных, я хочу утверждать, что переданный dto.enum имеет то же значение, что и вставленное значение enum в базе данных.

То мое сообщение об ошибке я получаю:

Expected: A 

    But was: A 

На самом деле они имеют такое же значение, но другой тип: dto.enum против businessobject.enum.

Итак, где бы вы определили это перечисление, тогда оба объекта могут это сделать, и оба объекта не имеют связи друг с другом?

Я подумал о том, чтобы добавить дополнительный класс C# в свой бизнес-уровень и внутри определения перечисления, используемого бизнес-объектом dto AND, поэтому утверждение будет работать.

Что вы хотите сделать?

+0

Должны ли вы иметь перечисления в слое DTO? Точка слоя dto заключается в том, что она сериализуется в json или xml, все равно все строки. Интересно .... –

ответ

2

Вы должны поместить перечисление во внешний класс util, к которому у обоих объектов будет доступ к ссылке по проекту (скорее всего, слой модели). Затем они могут использовать одно и то же перечисление, и вам не придется пытаться делать кастинг, конвертировать или пара (при условии, что перечисления являются точными дубликатами eachother).

+0

Я называю новый проект TypeDefinition. Здесь я определяю в классе C# Definitions.cs мое перечисление, на которое ссылаются Служба и Домен. Спасибо Recursor. Я думаю, это хорошая идея. – Elisabeth

1

Если имена точно так же, вы можете просто сделать следующее:

BusinessEnumType businessEnum = GetBusinessEnum(); 
DTOEnumType dtoEnum = GetDTOEnum(); 

Assert.AreEqual(businessEnum.ToString(), dtoEnum.ToString()); 

Не идеально, возможно, но избавит вас от необходимости определения вещи повсюду.

Возможно, вы также сможете написать IEqualityComparer, который вы можете использовать, чтобы проверить, является ли что-то BusinessEnumType «тем же», что и DTOEnumType, но это может быть головная боль обслуживания.