È molto borderline. Non mi piacciono i test unitari che dovresti scrivere.
Preferirei vedere un metodo sul BasketItem che legge
public bool isInBasket(int GroupID, DateTime? ArtworkDate)
{
return this.GroupID == GroupID &&
this.ArtworkDate == ArtworkDate ?? this.ArtworkDate;
}
E poi
/// <summary>
/// Is a group in the basket already?
/// </summary>
public static bool isItemInBasket(List<BasketItem> BasketItems, int GroupID)
{
return isItemInBasket(BasketItems, GroupID, null);
}
public static bool isItemInBasket(List<BasketItem> BasketItems, int GroupID, DateTime? ArtworkDate)
{
return BasketItems.Any(c => c.isInBasket(GroupID, ArtworkDate)) != null;
}
Potrei andare oltre e mettere un'interfaccia su BasketItem in modo da poter inserire risposte false su questi test.
Tutto ciò che ho detto, non ti deluderebbe su una revisione del codice per il tuo codice, ti avvertirei che se diventasse più complicato sarebbe un problema.
Modifica: In realtà, rileggendolo, ho appena notato che dimostra il punto. Perché ora non ha senso. Questo mi costringe a riconsiderare la mia denominazione.
public bool isInGroup(int GroupID, DateTime? ArtworkDate)
{
return this.GroupID == GroupID &&
this.ArtworkDate == ArtworkDate ?? this.ArtworkDate;
}
E poi
/// <summary>
/// Is a group in the basket already? (do I even need this comment any more?)
/// </summary>
public static bool isGroupInBasket(List<BasketItem> BasketItems, int GroupID)
{
return isItemInBasket(BasketItems, GroupID, null);
}
public static bool isGroupInBasket(List<BasketItem> BasketItems, int GroupID, DateTime? ArtworkDate)
{
return BasketItems.Any(c => c.isInGroup(GroupID, ArtworkDate)) != null;
}
Ulteriore modifica: In realtà, più avanti percorriamo questa strada, più penso di vedere il problema. Tutti, incluso me stesso, chi sente che è duplicato sta reagendo al sovraccarico del metodo, che d'istinto dovrebbe essere un metodo che chiama un altro.
Ma in realtà, il secondo metodo sta facendo qualcosa di molto, molto diverso. E il fatto che nessuno di noi sia in grado di capire a cosa serve questo campo ArtworkDate suggerisce che forse il nome del secondo metodo dovrebbe essere cambiato. isGroupInBasketAnd ... Cosa?
Penso che tu veda il codice come non duplicato perché sai quanto sia diverso, ma tutti gli altri guardano, vedono lo stesso nome e pensano che sia solo un sovraccarico standard, un po 'di zucchero sintattico.