Существуют ли решения для оптимизации обновления устаревшего кода в нескольких местах? - PullRequest
1 голос
/ 04 июня 2010

Я работаю над некоторым старым кодом, который изначально был разработан для обработки файлов двух разных типов. Недавно мне было поручено добавить новый тип файла в этот код. Большинство моих проблем было решено путем заполнения обширного XML-файла новой записью, которая обрабатывает все, от названий списков до того, как файл записывается во множественном нижнем регистре. Но этого оказалось недостаточно, поскольку в 24 различных файлах кода было, возможно, 50 разных мест, где мне приходилось обновлять жестко закодированные операторы-переключатели, которые разветвлялись только для исходных двух типов файлов.

К сожалению, в этом нет последовательности; Есть методы, которые работают наполовину из XML-файла, а наполовину - из жесткого кода. Некоторые из файлов, которые выглядят так, как будто они работают вне XML-файла, не работают, а некоторые, которые я ожидаю, что мне нужно обновить жесткий код, не нуждаются в этом. Таким образом, единственный способ найти большинство из них - это пройти тестирование всей системы, когда только ее часть работает, и найти один шаг для исправления (когда мне повезло, что регистрация ошибок фактически говорит мне, что происходит), а затем снова запустил все это. Это напрасная трата времени на тестирование частей кода, которые уже подтверждены для работы, лучше потратить время на тестирование новых частей, которые я должен добавить поверх всего этого.

Это полторы хлопоты, и, к счастью, я могу ожидать, что мне придется добавить еще один новый тип файлов в ближайшем будущем.

Существуют ли какие-либо решения, которые могут помочь в этом виде деятельности? Кое-что, что я могу ввести некоторые параметры текущих функций, документировать, какие пункты в целом проекте кода должны быть обновлены, и выполнить что-то приятное в следующий раз, когда мне нужно будет добавить новую функцию в код. Его даже не нужно полностью автоматизировать, что поможет мне ориентироваться прямо в конкретные точки во всем и, возможно, даже записать, какие параметры необходимо загрузить.

Сомневаюсь, что это имеет особое значение, но код состоит из страниц ASP.NET, некоторых элементов управления ASP.NET, сотен файлов кода C # и нескольких дополнительных файлов XML. Это все в настоящее время в паре больших проектов Visual Studio 2008.

Ответы [ 2 ]

0 голосов
/ 05 июня 2010

Я полностью согласен с комментарием об использовании книги Майкла Фезерса, чтобы научиться встраивать новые тесты в унаследованный код.Я также настоятельно рекомендую рефакторинг Мартина Фаулера.То, что вам нужно сделать для своего кода, это реализовать рефакторинг «Заменить условные выражения полиморфизмом».

Я думаю, ваш код сегодня выглядит примерно так:

if (filetype == 23)
{
  type23parser.parse(file);
}
else if (filetype == 69)
{
  filestore = type69reader.read(file);
  File newfile = convertFSto23(filestore);
  type23parser.parse(newfile);
}

Что выВы хотите абстрагировать все типы логики if (type == foo) в шаблоны стратегий, которые создаются на фабрике.

class FileRules : pReader(NULL), pParser(NULL)
{
private:
  FileReaderRules *pReader;
  FileParserRules *pParser;
public:
  void read(File* inFile) {pReader->read(inFile);};
  void parse(File* inFile) {pParser->parse(inFile);};
};

class FileRulesFactory
{
  FileRules* GetRules(int inputFiletype, int parserType)
  {
    switch (inputFiletype)
    {
    case 23: 
      pReader = new ASCIIReader;
      break;
    case 69:
      pReader = new EBCDICReader;
      break;
    }
    switch (parserType)
    ... etc...

, тогда ваша основная строка кода выглядит следующим образом:

  FileRules* rules = FileRulesFactory.GetRules(filetype, parsertype);
  rules.read(file);
  rules.parse(file);

Выполните этот рефакторинг, и добавление нового набора типов файлов, анализаторов, читателей и т. Д. Становится так же просто, как написание одного эксклюзивного для вашего нового типа.

Конечноиди читай книгу.Здесь я сильно упростил это и, вероятно, ошибся, но вы должны получить общее представление о том, как к этому подойти.Я также могу порекомендовать другую книгу «Образцы дизайна Head First», в которой есть отличный раздел о шаблонах Factory (если вам нравятся эти книги типа «Head First»).

0 голосов
/ 04 июня 2010

Не совсем то, что вы описываете, но если вы можете ввести шов в код и сложить некоторые интерфейсы, которые вы можете разорвать и смоделировать, набор тестов модулей / интеграции может помочь вам изменить старый код Вы можете не до конца понять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...