Per prima cosa devi decidere se è sufficiente avere sicurezza di runtime sul numero di immagini o se desideri avere compiletime safety .
Sicurezza in runtime
Raggiungere la sicurezza runtime è abbastanza semplice. Tutto quello che devi fare è rimuovere il setter di default per Images
e implementare un setter che esegue un controllo prima di salvare l'argomento ICollection<string>
dato se la raccolta ha almeno un elemento. Assicurati anche che non ci sia modo di cambiare Images
se non usando questo setter sicuro.
Lo svantaggio è, naturalmente, che si può provare a chiamare il setter con un elenco emtpy e il tuo IDE non ti mostrerà che fallirà in fase di runtime.
Sicurezza Compiletime
Per ottenere la sicurezza necessaria è necessario dedicare più impegno. Come hai riconosciuto, una raccolta lo rende in grado di non archiviare elementi. Questo appartiene al suo contratto e va benissimo. Comunque nel tuo caso, non lo vuoi. Pertanto, una raccolta non è del tipo corretto e devi creare il tuo tipo. La mia migliore idea è creare una classe che implementa le funzionalità specifiche dell'elenco e la deleghi a un elenco salvato internamente. Tuttavia, i metodi che potrebbero impostare l'elenco interno vuoto, devono essere intercettati per assicurarsi che l'elenco non sia mai vuoto. Nel costruttore devi quindi fare qualcosa di disordinato. Ha 2 parametri: T Head
e ICollection<T> Rest
(entrambi non devono essere nulli). Il Head
e tutti gli elementi di Rest
vengono quindi inseriti nell'elenco interlale. Quando il primo argomento T non è nullo, l'elenco interal non è vuoto e siccome intercetti tutti i metodi che modificano l'elenco, puoi assicurarti che non diventi mai una lista vuota.
Non è molto elegante, secondo me, perché non puoi creare questo tipo solo da una lista. Ma in cambio si ottiene la sicurezza compiletime, quindi tutti coloro che cercano di instanciare questo tipo di dati vuoti avranno l'IDE che si lamenterà perché non è possibile.
Informazioni sulla tua domanda aggiuntiva per la memorizzazione nel database: Sì, penso che l'unico modo è avere una tabella aggiuntiva per le stringhe di immagini perché è "da 1 a molti". Non c'è modo di aggirare questo a meno che tu non rinunci alla normalizzazione.