Come partecipare all'allenamento IComparable to a team? [chiuso]

4

Io (sono solo uno sviluppatore) ho il compito di formare il mio team su una tecnica o tecnologia. Ho azzerato su System Interfaces, IComparable e IEquatable per essere specifici. Come si fa per insegnare (anche se è 1 ora), che cos'è un IComparable e dove possiamo usarlo dando un esempio.

Tuttavia, non sono del tutto sicuro che ciò possa far capire al mio team e iniziare a utilizzare IComparable.

Nel mio progetto, tuttavia, ho una classe Discount e ci sono casi in cui devo unire due elenchi di sconti. Ora, sarebbe davvero un buon esempio di dove IEquatable sarebbe utile quando faccio l'unione, vero?

Ho avuto il seguente modello per l'allenamento.

  • Introduzione: Perché è necessario IComparable? (E, non ho potuto ottenere una risposta che posso usare per l'insegnamento).
  • Struttura di IComparable (Ancora, che altro posso parlare di un metodo diverso da quello di CompareTo).
  • Codice di esempio
  • Dove possiamo utilizzarlo nel nostro progetto
  • Domande.
posta Magic 03.05.2012 - 15:43
fonte

5 risposte

5

Introduction: Why does one need IComparable? (And, I could not get an answer that I can use for teaching).

Perché vuoi essere in grado di confrontare diversi tipi di oggetti senza preoccuparti di come viene eseguito il confronto reale. Vuoi dichiarare una responsabilità e non preoccuparti dell'attuazione effettiva in quanto potrebbe variare. L'interfaccia fa proprio questo.

Riguarda il confronto degli oggetti. Niente di più, niente di meno.

Structure of IComparable (Again, what else can I talk about other than CompareTo method).

Non ci sono implementazioni o strutture in quanto tali. Espone un comportamento o una preoccupazione. Non c'è nient'altro.

Sample Code

  • Dichiara un'interfaccia
  • Crea due implementazioni
  • Fai attenzione a non preoccuparti di come funzionano le implementazioni, tutto quello che ti interessa è poter confrontare gli oggetti.

Where we can use that in our project

  • Confrontare gli investimenti è interessante. L'investimento X potrebbe essere meno redditizio, redditizio o più redditizio dell'investimento Y.

È quindi possibile definire la seguente interfaccia:

public interface IComparable<IInvestment> 
{ 
   int Compare(); 
}

Puoi avere due implementazioni di IInvestment : RealInvestment e FakeInvestment (versione fittizia per test di unità e mock)

Infine, avrai due diverse routine di confronto per investimenti reali e falsi:

public RealInvestmentComparable : IComparable<RealInvestment>
{
    // Implement interface
}

public FakeInvestmentComparable : IComparable<FakeInvestment>
{ 
    // Implement interface 
}

Se puoi basare il tuo allenamento su un'interfaccia diversa, allora forse è un'idea migliore. Di solito è molto facile parlare di IRepository . È quindi possibile avere più implementazioni di quel repository, ad es. FakeRepository , EFRepository . Puoi utilizzare un repository fasullo con test unitari.

    
risposta data 03.05.2012 - 18:17
fonte
0

Hai davvero bisogno di esprimere i vantaggi dell'utilizzo di queste interfacce. Personalmente li ho trovati utili per la memorizzazione di oggetti di dominio nelle raccolte e per la necessità di ordinare le raccolte o cercare elementi nelle raccolte.

Dimostrare il codice necessario per eseguire l'ordinamento / ricerca in una raccolta senza utilizzando queste interfacce e quindi dimostrare come l'utilizzo di queste interfacce rende il codice necessario più facile da mantenere e da utilizzare. Utilizza l'esempio che hai citato con la classe Discount se vuoi, o qualsiasi altra classe con cui il tuo team ha già familiarità.

    
risposta data 03.05.2012 - 15:51
fonte
0

L'utilità principale delle interfacce integrate è che sono integrate; se hai bisogno di definire che due oggetti possono essere confrontati per l'uguaglianza, IEquatable è proprio lì. Lo stesso per IComparable e la possibilità di confrontare per grandezza relativa.

Questo porta a un altro motivo principale per cui li useresti; il .NET Framework fa. Linq cerca di vedere se gli oggetti sono ICompble / IEquatable e usa quelle implementazioni quando può. Le raccolte che sono ordinabili richiedono IComparable; le raccolte con i metodi di tipo IndexOf () generalmente richiedono implementazioni IEquatable sul loro tipo raccolto. Quindi, per utilizzare ciò che ti offre il Framework, devi usare ciò che ti offre il Framework.

Quindi, per rispondere alle domande che poni nel tuo modello in modo succinto:

  • Concettualmente, hai bisogno di IComparable ogni volta che devi dire ad un altro codice che questo oggetto può essere confrontato con un altro oggetto per determinare l'ampiezza relativa. L'altro codice quindi conosce, proprio come qualsiasi altra interfaccia, il nome esatto e la firma del metodo da chiamare per eseguire questa operazione.

  • La "struttura" di IComparable È la dichiarazione del metodo CompareTo () che accetta un oggetto (nella variante non generica) o un oggetto di un tipo strongmente definito (per l'interfaccia generica, di solito questo tipo è lo stesso tipo della classe). L'unica altra cosa che devi discutere è il risultato atteso; un valore di zero se le due istanze sono uguali, un valore inferiore a zero se l'istanza su cui si sta chiamando il metodo precede l'istanza passata come parametro e un valore maggiore di zero se l'istanza su cui è stato chiamato il metodo supera l'istanza passata come parametro.

  • I campioni di codice abbondano; controlla la documentazione MSDN.

  • Praticamente tutto ciò di cui hai bisogno per essere in grado di ordinare secondo un sottoinsieme esoterico predefinito dei suoi dati.

risposta data 03.05.2012 - 17:24
fonte
0

Dato che stai cercando esempi per IComparable, perché non provare qualcosa di semplice (a tutti piacciono i soldi): entrate e spese? O confrontare le competenze di persone diverse dal punto di vista delle risorse umane (creando metriche semplici ma diverse per sviluppatori, ingegneri, contabili, operatori di macchine ...) È possibile creare un esempio molto semplice basato su questa idea, toccando ogni elemento del proprio elenco. Quindi la risposta "perché usare IComparable" sarebbe qualcosa come essere in grado di confrontare le caratteristiche di oggetti diversi sulla base di una singola caratteristica simile ... Mi piace l'idea di provare a far funzionare lo stesso programma, o senza IComparable o altro interfacce.

    
risposta data 03.05.2012 - 20:02
fonte
0

Personalmente preferisco sempre implementare un IComparer piuttosto che ICompare. ICompare è ottimo in casi semplici, ma a volte IComparer ti offrirà maggiore flessibilità. Un esempio che mi viene in mente è un comparatore di volo che ho dovuto scrivere, in alcuni scenari era sufficiente essere lo stesso percorso, in altri dovevi percorrere lo stesso percorso nello stesso giorno e in un terzo esempio doveva essere lo stesso volo.

Potresti usare questo esempio di volo come esempio, penso che sia una soluzione reale che la maggior parte delle persone capirebbe.

    
risposta data 08.05.2012 - 10:14
fonte

Leggi altre domande sui tag