Caricamento dati per l'articolo ShoppingCart

1

Attualmente sto cercando di coprire il nostro carrello con i test delle unità.

La classe ShoppingCartItem ha la proprietà Term . Carica anche i termini disponibili per questo articolo al momento della creazione dell'oggetto. Attualmente questo viene fatto usando la chiamata alla classe statica nel costruttore.

Stato attuale:

public class ShoppingCartItem
{
    private Dictionary<Guid, ShoppingCartTerm> terms; 
    public ShoppingCartItem(int productID)
    {
        terms = SKUInfoGopasProvider.LoadAllTerms(productID);
    }
 }

La mia domanda è. Come rendere intercambiabile la fonte di dati? Devo introdurre la classe di fabbrica?

La risposta ovvia è l'uso dell'iniezione del costruttore, ma non mi sembra giusto.

Sto pensando di fare qualcosa in questo senso.

public class ShoppingCartData
{
    private readonly ShoppingCartItemFactory _factory;

    public ShoppingCartData(ShoppingCartItemFactory factory)
    {
        _factory = factory;
    }

    public void AddItem(int productId)
    {
        var item = _factory.CreateCartItem(productId);
        _items.Add(item);
    }
}
    
posta Josef Rousek 20.12.2013 - 11:59
fonte

1 risposta

1

Penso che tu sia sulla strada giusta. Il codice che hai postato, tuttavia, non lo riflette appieno, quindi parlerò qui.

L'elenco di Terms sembra essere una dipendenza della classe ShoppingCartItem . Come tale, sarei tentato di iniettarlo tramite il costruttore.

La difficoltà qui è che ora qualsiasi codice utilizzato per creare un'istanza di ShoppingCartItem ora ha bisogno di generare le dipendenze esplicite ... meh.

Un modo conveniente per aggirare questo è usare una fabbrica. La factory (come mostrato sopra) sarà responsabile della risoluzione della dipendenza, passandola nel costruttore ShoppingCartItem e restituendo il nuovo ShoppingCartItem . Fatto, giusto?

Bene, come fa la Factory a gestire l'elenco di Term s? Questo è dove penso che i contenitori IoC brillino davvero. La tua fabbrica può utilizzare un contenitore IoC per risolvere questa dipendenza al volo.

Questa configurazione dovrebbe rendere testabile ShoppingCartItem , così come Factory.

    
risposta data 20.12.2013 - 14:52
fonte

Leggi altre domande sui tag