Я бы предложил копию Resharper или Coderush, чтобы исправить слепоту кодеров :) Подсветка скобок входит в комплект.
Кроме того, это классический или базовый интерфейс + фабричный шаблон. Как уже говорили другие, MEF и ICryptoTransform, скорее всего, самое чистое место для старта, поскольку фреймворк предоставляет его вам, но если вы хотите знать основы:
Сделать интерфейс:
public interface IEncrypter {
string Encrypt(string plaintext);
}
затем реализуйте это:
public class MD5Encrypter : IEncrypter {
public string Encrypt(string plaintext) {
//code goes here.
}
}
public class SHA1Encrypter : IEncrypter {
public string Encrypt(string plaintext) {
//code goes here.
}
}
затем создайте фабрику:
public class EncryptionFactory {
public static IEncrypter GetEncrypter() {
//work out which one to return, maybe based on a config value?
// I'm just going to return an MD5, but you'd want to use a switch statement etc
// to decide which one to return.
return new MD5Encrypter();
}
}
И используйте это так:
IEncrypter encrypter = EncryptionFactory.GetEncrypter();
string garbageText = encrypter.Encrypt("Hello, world");
Все, что вы изменяете, это фабрика, или, что еще лучше, конфигурация, которую фабрика считывает, чтобы заставить ее использовать что-то еще. Черт возьми, вы можете основывать его на времени суток, если вы действительно хотите :) Код, который вы пишете и который использует интерфейс, не заботится о том, чем на самом деле является объект - он просто заботится о том, что имеет метод: string Encrypt (string).
MEF делает это для вас, в некотором смысле.
Использование интерфейсов также означает, что вы можете вернуть фиктивный поддельный IEncrypter, который ничего не делает, так что вы можете написать модульные тесты против него, фактически не выполняя шифрование. Не СУПЕР полезно в этом случае, но это хорошая практика в целом.
Кроме того, вы можете использовать предложение @ rwwilden в Factory для его генерации - вы читаете строку из config и используете асимметричный / симметричный метод создания, о котором он говорит, для создания базового класса .....