Как решить проблему «Growing If Statement»? - PullRequest
19 голосов
/ 08 июня 2010

Я немного почитал о шаблонах проектирования и хотел взглянуть на них. Учтите следующее:

Dim objGruntWorker as IGruntWorker

if SomeCriteria then
   objGruntWorker = new GoFor()
else if SomeOtherCriteria then
   objGruntWorker = new Newb()
else if SomeCriteriaAndTheKitchenSink then
   objGruntWorker = new CubeRat()
end if

objGruntWorker.GetBreakfast()
system.threading.thread.sleep(GetMilliSecondsFromHours(4))
objGruntWorker.GetLunch()

Приведенный выше код увеличивается каждый раз, когда возникает новый критерий. Я видел такой код повсюду, и по незнанию написал его сам. Как это должно быть решено? У этого вида анти-паттерна есть более «формальное» имя? Спасибо за вашу помощь!

Редактировать: Еще одно соображение - я хочу избежать перекомпиляции существующих реализаций IGruntWorker, просто чтобы добавить новую реализацию.

Ответы [ 11 ]

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

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

Если вас беспокоит только удобочитаемость, вы можете использовать троичный оператор или если оценки критериев просто ==, вы можете использовать оператор switch.

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