Attualmente sto lavorando a un'implementazione impostata in JavaScript. Questo dovrebbe simulare i generici come noto da Java o C #. Ho bisogno di una versione mutabile di quella (consente di aggiungere / rimuovere valori impostati) e immutabile.
La mia firma del costruttore è la seguente:
new GenericSet( 'number', [ 10, 20, 30 ] );
,
// mutable set of mixed values (allows to add further values via "add")
new MutableGenericSet( '*', [ 'foo', 42, {}, /./ ] );
o
// DataValues.prototype.equals will be used by the set for determining equality.
new GenericSet( { type: DataValue, valueComparison: 'equals' }, [ dv1, dv2, dv3 ] );
Just GenericSet o un'implementazione impostata per tipo?
Inizialmente, il mio scopo principale era quello di avere set di valori di un tipo. Per esempio. un DataValuesSet che accetta solo valori di dati. Potrei quindi definire interfacce con funzioni che richiedono un'istanza DataValuesSet . Non potrei usare l'ereditarietà (e suppongo che sarebbe comunque un male), quindi userei la composizione e ho internamente un'istanza GenericSet / MutableGenericSet .
Un approccio alternativo sarebbe prendere sempre GenericSet e implementare e utilizzare GenericSet.requireSetOfType( type )
che genererebbe un errore se il tipo dell'insieme non fosse quello richiesto. La mia preoccupazione di farlo in questo modo è che le mie definizioni di interfaccia sembrerebbero meno esplicite.
Prendere
/**
* @param DataValuesSet dataValues
*/
function printDataValues( dataValues ) {
if( !( dataValues instanceof DataValuesSet ) ) {
throw Error( '...' );
}
// ...
}
vs.
/**
* @param GenericSet<DataValue>
*/
function printDataValues( dataValues ) {
// Throws error if dataValues is not a set or it it is a set with values of wrong type.
GenericSet.requireSetOfType( dataValues, DataValue );
// ...
}
forse usare @param GenericSet(DataValues) dataValues
per documentare la seconda scelta andrebbe bene? Qualcuno vede ulteriori implicazioni con il secondo approccio o ci sono suggerimenti alternativi? Per quanto mi riguarda, il secondo sembra più intuitivo e la mia preoccupazione per il primo è che vorrei creare un sovraccarico maggiore con i costruttori, mentre al momento non riesco a vedere alcun chiaro vantaggio.