Когда нужно создать некий новый элемент, самым лучшим первым шагом будет создание элемента, который ничего не умеет делать. С таким подходом вы, по крайней мере, можете быть уверены, что начинаете работу на прочной базе.
Если мне нужно написать компонент, который выполняет определенное действие, последовательность шагов для достижения этой цели у меня, скорее всего, будет такой:
Очень часто приходится видеть, как не слишком опытные разработчики бросаются в дело очертя голову и сразу начинают писать что-то большое и сложное. Потом, по причине величины и сложности, у них не получается даже провести компиляцию. Они приходят за помощью за словами: «У меня тут возникла проблема с одной строкой кода», но, когда начинаешь изучать, что у них написано, понимаешь, что проблема-то отнюдь не исчерпывается этой строкой кода. Программа еще даже близко не подошла к тому, чтобы в принципе осознать возможность исполнения того, что указывается в этой строке кода. И тогда я бормочу себе под нос: «Как ты вообще довел до такого?»
Начните с сущности, которая не делает ничего. Убедитесь, что ничегонеделание происходит успешно. И только после этого можно начинать вносить изменения с прицелом на то, чтобы она что-то стала делать. Действуя таким образом, вы можете быть уверены, что проблемы, которые возникают по ходу дела, связаны именно с попытками произвести конкретное действие.
Если мне нужно написать компонент, который выполняет определенное действие, последовательность шагов для достижения этой цели у меня, скорее всего, будет такой:
- Нулевой этап: написание отдельной программы, которая производит нужное действие. Это гарантирует, что такое действие как минимум возможно в принципе.
- Теперь, когда у меня есть рабочий код, выполняющий необходимое действие, я прописываю компонент, который НЕ выполняет это или другие действия. Это позволяет мне удостовериться, что я по крайней мере знаю, как создать компонент.
- Далее я закрепляю компонент за действием, но делаю так, чтобы метод Invoke только передавал отладчику сообщение «Ура!» и ничего больше. Это позволяет мне удостовериться, что я способен организовать запуск компонента в нужный момент.
- Дальше я добавляю в метод Invoke ровно столько кода, сколько нужно, чтобы обозначить, какое требуется выполнить действие и применительно к какому объекту оно выполняется, передать эту информацию отладчику и дождаться возврата, не выполняя при этом само действие. Это позволяет мне удостовериться, что я способен определить, какое именно действие требуется произвести.
- Наконец, я добавляю в метод Invoke всё остальное, что необходимо для осуществления действия над желаемым объектом. Это можно сделать просто скопировав и вставив уже проверенный код из программы, которая была создана на нулевом этапе.
Очень часто приходится видеть, как не слишком опытные разработчики бросаются в дело очертя голову и сразу начинают писать что-то большое и сложное. Потом, по причине величины и сложности, у них не получается даже провести компиляцию. Они приходят за помощью за словами: «У меня тут возникла проблема с одной строкой кода», но, когда начинаешь изучать, что у них написано, понимаешь, что проблема-то отнюдь не исчерпывается этой строкой кода. Программа еще даже близко не подошла к тому, чтобы в принципе осознать возможность исполнения того, что указывается в этой строке кода. И тогда я бормочу себе под нос: «Как ты вообще довел до такого?»
Начните с сущности, которая не делает ничего. Убедитесь, что ничегонеделание происходит успешно. И только после этого можно начинать вносить изменения с прицелом на то, чтобы она что-то стала делать. Действуя таким образом, вы можете быть уверены, что проблемы, которые возникают по ходу дела, связаны именно с попытками произвести конкретное действие.