Come si effettua il refactoring di questo codice in modo da poter centralizzare la proiezione?Centralizzare o consolidare LINQ selezionare
public IEnumerable<ItemDto> GetItemsByType(int itemId, ItemType itemType)
{
IEnumerable<ItemDto> items = null;
try
{
var tempItems= _Items.Get(i => i.ItemId == itemId
&& o.Active == true);
switch (itemType)
{
case ItemType.Normal:
items = from item in tempItems
select new ItemDto
{
// many fields here
};
break;
case ItemType.Damaged:
items = from item in tempItems
join itemDetail in _ItemDetails.Get() on item.ID equals itemDetail.ItemID
select new ItemDto
{
// many fields here
};
break;
case ItemType.Fixed:
items = from item in tempItems
join itemDetail in _ItemDetails.Get() on item.ID equals itemDetail.ItemID
where item.Status.ToLower() == "fixed"
select new ItemDto
{
// many fields here
};
break;
// more case statements here...
default:
break;
}
}
catch { ... }
}
Fondamentalmente, ho un sacco di dichiarazioni di casi e una proiezione lunga su ogni dichiarazione di caso. Sono preoccupato che una volta che il DTO deve cambiare, ad esempio aggiungi un nuovo campo, la proiezione degli altri casi potrebbe non essere coerente tra loro (aggiornamento dimenticato o mancato). Come posso centralizzare questo?
Ognuno di questi "// campi qui" contiene lo stesso codice? – Enigmativity
Sì, sono lo stesso codice –
Quindi la mia risposta potrebbe essere utile. – Enigmativity