Sto provando a progettare un semplice framework di conversione basato su questi requisiti:
- Tutti gli sviluppatori devono seguire un insieme predefinito di regole da convertire dall'entità di origine all'entità di destinazione
- Alcune norme generali dovrebbero poter essere applicate in un luogo centrale, senza interferenze con il codice degli sviluppatori
- Sia la creazione di convertitori che l'uso di classi di convertitori dovrebbero essere semplici
Per risolvere questi problemi nel linguaggio C #, mi è venuto in mente un pensiero. Lo sto scrivendo qui, sebbene non si compili affatto. Ma supponiamo che C # compili questo codice:
Creerò un'interfaccia generica chiamata IConverter
public interface IConverter<TSource, TTarget>
where TSource : class, new()
where TTarget : class, new()
{
TTarget Convert(TSource source);
List<TTarget> Convert(List<TSource> sourceItems);
}
Gli sviluppatori implementerebbero questa interfaccia per creare convertitori. Ad esempio:
public class PhoneToCommunicationChannelConverter : IConverter<Phone, CommunicationChannle>
{
public CommunicationChannel Convert(Phone phone)
{
// conversion logic
}
public List<CommunicationChannel> Convert(List<Phone> phones)
{
// conversion logic
}
}
E per semplificare l'utilizzo di questa classe di conversione, immagina di aggiungere static
e this
parole chiave ai metodi per trasformarli in Metodi di estensione e utilizzarli in questo modo:
List<Phone> phones = GetPhones();
List<CommunicationChannel> channels = phones.Convert();
Tuttavia, questo non viene nemmeno compilato. Con questi requisiti, posso pensare ad altri progetti, ma a loro manca un aspetto. O l'implementazione diventerebbe più difficile o caotica e fuori controllo, o l'utilizzo diventerebbe veramente difficile. Il design è giusto? Quali alternative potrei avere per raggiungere tali requisiti?