У меня есть много методов (в данном случае, от веб-сервисов, но, может быть, это не имеет никакого влияния?) Для вызова. Они уже версии с фиксированным выпуском и не будут изменены , я должен адаптироваться к ним. У меня уже есть прокси в моем проекте, и на самом деле я уже звоню им, и проект в порядке.
Этот метод main класса получает некоторые входные параметры (тип транзакции и строку XML, содержащую данные транзакции). Основываясь на TransactionType, я знаю, какой класс и метод мне следует вызывать. Я также должен предоставить ему ожидаемую переменную типа, уже созданную из предоставленного XML. Вот как это происходит сегодня (у меня нет кода прямо здесь, поэтому простите меня за любые синтаксические ошибки), примерно:
public class MyClass ()
{
public void MyMethod( string TransactionType, string XML )
{
switch( TransactionType ) {
case "1":
type1VO type1Object = ( new Deserializer<Type1>() ).XML2Object( XML );
ws = new WSProxy1();
string response = ws.Method1( type1VO );
//
// lots of other lines of code that use type1VO, type1Object, the response, etc.
//
break;
case "2":
type2VO type2Object = ( new Deserializer<Type2>() ).XML2Object( XML );
ws = new WSProxy2();
string response = ws.Method2( type2VO );
//
// same structure here, but handling types specific for "case 2"
//
break;
}
...
}
}
И это продолжается и продолжается. Сегодня этот код уже работает, обрабатывая около 15 различных типов транзакций, но он был разработан так, как вы видели выше. Поскольку я собираюсь изменить его (перенесу этот код в саму библиотеку, потому что другие системы нуждаются в этой логике), я подумал, что может быть полезно некоторое уточнение кода. Кроме того, приведенный выше код довольно сокращен: есть больше строк, которые обрабатывают определенные типы для каждого случая, я только что привел пример.
Пока это работает, я не так волнуюсь, но мне это не кажется таким "изящным". У меня создается впечатление, что какой-то шаблон проектирования может справиться с этим, и что я мог бы обрабатывать любую транзакцию одним блоком вместо того, чтобы повторять ее для каждого типа транзакции. Может быть, я ошибаюсь, и это невозможно, я просто «почувствовал» это, посмотрев на повторяющийся код.
Это C # на .NET v2.0, но я не против, если есть ответы, касающиеся других версий или языков. Я забочусь намного больше о вовлеченной концепции. Я благодарю всех вас за любые советы, которые вы можете дать, они все всегда великолепны.