adda_ wrote:Prosche wrote:
И тут казалось бы ваш пример выиграл, но ваш код, adda_, тоже плох, вы даже сами объяснили почему выше, он требует бесконечного рефакторинга. Ничего страшно в button нет, камман сенс подсказывает, что если у нас в cancelInvoice определена кнопка, одна, она и отвечает за этот кансел. Писать километровые имена для этого совсем не обязательный. А еще вы своим примером сломали архитектуру. Ограничили функцию, которая ответственна за отмену инвойса только созданием кнопки, а если завтра она еще таймер будет создавать, который автоматом канселит инвойс? вы что будете делать, переименовывать ее в createCancelInvoiceButtonAndTimer? Я понимаю почему вам приходится рефакторить 100500 раз все.
Пример стенкина хороший вощем, а ваш плохой.
Я с вами не согласен.
Во первых предполагается что это реальная система где множество элементов управления, а не один - два.
Во вторых в данном примере функция Создает кнопку и более ничего. Функция не канселит инвойс, канселить будет обработчик события который повешен на кнопке.
Третье - вы к сожалению не знакомы с одним из главных принципов написания хорошего кода - функция должна выполнять одну и только одну задачу, но делать это хорошо.
В реальной жизни функция не только созлала бы кнопку но и установила ее свойства, размер, цвет надписи, положение, подключила бы обработчики событий. Т.е. там было бы с десяток строчек кода. Добавлять туда что то совершенно излишне.
Если нам надо создавать таймер, то будет другая функция которая это сделает.
А все эти функции будут вызываться скажем из другой функции.
Code: Select all
function createInvoiceControls ()
{
createInvoceCancelButton ();
createInvoceSubmitButton ();
....
createInvoceAutoProcessTimer();
...
}
.
Обратите внимание, что когда я написал последний пример, то оказалось что для лучшей читаемости кода имеет смысл поменять название функции - с createCancelInvoceButton на createInvoiceCancelButton. Т.е перерефакторить код. Что занимает на самом деле меньше минуты. Но оно того стоит.
Если бы я писал этот код, то возможно через какое то время я бы еще его порефакторил, потому что имя функции createInvoceControls не совсем правильно отображает то что функция делает. А именно создает не только элементы управления но и таймеры, которые не явлеются контролами. Скорее всего я бы убрал оттуда создание таймера, и вынес его туда где мы будем создавать какую то логику реализованную на таймерах. Т.е. три - четыре цикла рефакторинга я бы сделал обязательно.
Вынужден сказать вам, что у меня сложилось впечатление, что вы не умеете писать код который легко читается и который можно поддерживать