Ho un grosso oggetto:
class BigObject{
public int Id {get;set;}
public string FieldA {get;set;}
// ...
public string FieldZ {get;set;}
}
e un oggetto specializzato, simile a DTO:
class SmallObject{
public int Id {get;set;}
public EnumType Type {get;set;}
public string FieldC {get;set;}
public string FieldN {get;set;}
}
Personalmente trovo un concetto di casting esplicito di BigObject in SmallObject - sapendo che si tratta di un'operazione a perdita di dati a senso unico, molto intuitiva e leggibile:
var small = (SmallObject) bigOne;
passSmallObjectToSomeone(small);
Viene implementato utilizzando l'operatore esplicito:
public static explicit operator SmallObject(BigObject big){
return new SmallObject{
Id = big.Id,
FieldC = big.FieldC,
FieldN = big.FieldN,
EnumType = MyEnum.BigObjectSpecific
};
}
Ora, potrei creare una classe SmallObjectFactory
con il metodo FromBigObject(BigObject big)
, che farebbe la stessa cosa, aggiungerla all'iniezione delle dipendenze e chiamarla quando necessario ... ma a me sembra ancora più complicata e superflua.
PS Non sono sicuro che sia pertinente, ma ci sarà OtherBigObject
che sarà anche in grado di essere convertito in SmallObject
, impostando% diversoEnumType
.