Какие методы существуют для предотвращения / удаления общего состояния? - PullRequest
1 голос
/ 01 октября 2010

Задача

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

Вопрос

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

Одним из способов было бы программирование более функциональным способом программирования. Какие еще лучшие практики существуют и в каких ситуациях они наиболее подходят?

Примеры кода были бы очень признательны, если бы они помогли объяснить методику.

* * Пример тысячи двадцать-одина * +1022 *

Bad

ModuleA

Public Sub DoSomething
    Range("A2").Value = Worksheets("Sheet2").Range(cellReference).Value + 10
End Sub

ModuleB

Global cellReference = "B22"

Лучше (потому что нет ссылки на глобальную переменную и нет жестко закодированных листов и ссылок на ячейки)

ModuleA

Public Sub DoSomething(resultCell, sourceSheet, sourceCell)
       Range(resultCell).Value = Worksheets(sourceSheet).Range(sourceCell).Value + 10
End Sub

ModuleB

deleted

Объяснение

Итак, я полагаю, что здесь применены следующие методы:

  • Удалить жестко запрограммированные значения и передать их в качестве параметров
  • Удалить ссылки на глобальные переменные и передать их в качестве параметров

Я знаю, что это основные рекомендации, которым нужно следовать в любом случае. Но, возможно, есть какие-то конкретно помогающие предотвратить общее состояние. Я думаю, Эрик Мейер сказал, что если вы поделились состоянием, то, как правило, что-то не так (я не уверен, правильно ли я его цитировал).

Окружающая среда

Кстати, это проект Excel VBA с тоннами устаревшего кода, разработанного людьми, не имеющими опыта разработки программного обеспечения. Ответы не должны быть направлены на эту конкретную настройку, хотя.

Ответы [ 2 ]

0 голосов
/ 23 ноября 2010

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

Позже вы могли бы проанализировать методы, чтобы найти дубликаты кода (вполне обычно иметь много дубликатов на таком программном обеспечении ...) И, возможно, с учетом знаний приложения, вы могли быпойти еще дальше и использовать какой-нибудь конечный автомат ... (вы сказали, что примете его, он дал его в качестве ответа)

0 голосов
/ 01 октября 2010

Я действительно не знаю, правильно ли я понял, но если бы у меня была проблема с большим количеством общих состояний, я бы использовал какой-нибудь конечный автомат .

С этим вы можете узнать, какой код зависит от состояния и какой код пересекается ...

Например, для разработки рабочего процесса (много информации о состоянии, необходимо проверить, что делать), это хорошее решение, и у вас есть тонна документации ...

Надеюсь, это поможет!

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