У меня есть большой объект:
class BigObject{
public int Id {get;set;}
public string FieldA {get;set;}
// ...
public string FieldZ {get;set;}
}
и специализированный, DTO-подобный объект:
class SmallObject{
public int Id {get;set;}
public EnumType Type {get;set;}
public string FieldC {get;set;}
public string FieldN {get;set;}
}
Лично я нахожу концепцию явного приведения BigObject в SmallObject - зная, что это односторонняя операция с потерей данных - очень интуитивно понятный и читаемый:
var small = (SmallObject) bigOne;
passSmallObjectToSomeone(small);
Это реализовано с использованием явного оператора:
public static explicit operator SmallObject(BigObject big){
return new SmallObject{
Id = big.Id,
FieldC = big.FieldC,
FieldN = big.FieldN,
EnumType = MyEnum.BigObjectSpecific
};
}
Теперь я мог бы создать SmallObjectFactory
класс с FromBigObject(BigObject big)
методом, который делал бы то же самое, добавлял его в инъекцию зависимостей и вызывал его при необходимости ... но мне он кажется еще более сложным и ненужным.
PS Я не уверен, если это актуально, но будет то, OtherBigObject
что тоже можно будет конвертировать в SmallObject
различные настройки EnumType
.
.ToSmallObject()
метод (или GetSmallObject()
). Мгновенное отклонение разума - я знал, что что-то не так с моим мышлением, поэтому я спросил вас, ребята :)
ToSmallObject
методе.