У мене великий об’єкт:
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метод.