Sto scrivendo una classe path che al momento ha un metodo chiamato Combine
che funziona come .NET Path.Combine. Se un argomento è un percorso assoluto (approssimativamente perché inizia con \
), quindi sostituisce qualsiasi elemento a sinistra, quindi:
Combine("c:\folder", "two"); // produces "c:\folder\two"
Combine("c:\folder", "\two"); // produces "c:\two"
Sono preoccupato che questo catturi le persone che si aspettano che il secondo produca anche "c: \ folder \ two" e mi chiedo come proteggersi da questo.
Un design alternativo dovrebbe avere un parametro enum per selezionare il comportamento:
enum CombineMethod { respectAbsolute, ignoreAbsolute };
Path Combine(CombineMethod combineMethod, Path a, Path b);
Questo sembra un po 'prolisso, quindi un'altra alternativa che sto considerando è avere due metodi:
Path Join( Path a, Path b );
Path Merge( Path a, Path b);
Merge("c:\folder", "two"); // produces "c:\folder\two"
Merge("c:\folder", "\two"); // produces "c:\two"
Join("c:\folder", "two"); // produces "c:\folder\two"
Join("c:\folder", "\two"); // produces "c:\folder\two"
Qualcuna di queste alternative sembra affatto intuitiva, pensi che sarebbe facile chiamare accidentalmente la funzione sbagliata. O hai migliori suggerimenti di progettazione in modo che gli utenti possano ottenere il comportamento desiderato senza accorgersi del comportamento sbagliato?