AXForum  
Вернуться   AXForum > Прочие обсуждения > Курилка
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.09.2012, 23:25   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Главный принцип хорошего кода
Цитата:
Что можно сказать о плохом коде?
[list][*]ничего не понятно[*]непонятные переменные[*]огромные методы[*]неочевидные алгоритмы[*]хаки, нарушения инкапсуляции[*]высокая сложность и запутанность[*]изменения приводят к сюрпризам[*]ничего не понятно

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

...

Все, что можно отделить и назвать — должно быть отделено и названо.

...

Альтернативное мнение

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

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

Один из способов решить этот конфликт выглядит следующим образом. Выносим все методы, какие только можно. В течении пары дней изменения не откатываем, терпим. Через дня три станет мучительно понятно, какие методы таки нужно вернуть обратно.
подробнее http://habrahabr.ru/post/150868/

стоит отметить, что в аксапте методично применялся такой подход. по крайней мере в базовых классах (например, InventMovement и потомки. например, ledgerjournalengine).
и я бы не сказал, что методичное применение такого подхода сильно облегчило жизнь при чтении кода.

может быть, я чего не понимаю?
что думаете?
Старый 05.09.2012, 00:50   #2  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Все, что можно отделить и назвать — должно быть отделено и названо.
Я считаю, что здесь нужна мудрость. Ни практика принудительной экстракции всех алгоритмов, ни упаковка кода в один метод не дадут читаемый код сами по себе. Здесь нужно выработать вкус и тонкое чувство наития, подсказывающее, где стоит выделять код, а где нет.
Таким рефакторингом можно заниматься...
Я бы сказал, статье недостает элемента новизны Вместо того, чтобы сперва бросаться в крайности, а потом призывать к мудрости и выработке вкуса "по бразильской системе", можно было бы для начала почитать того же Макконнела - у него в "Совершенном коде" созданию высококачественных методов посвящена целая глава почти на 30 страниц. Затем можно почитать "Рефакторинг..." Фаулера, где тонкому чувству наития противопоставляется расписанная до мелочей "поваренная книга" методов рефакторинга с четким указанием, какой, где, когда и как применять. "Все уже придумано до нас".
Цитата:
Сообщение от mazzy Посмотреть сообщение
стоит отметить, что в аксапте методично применялся такой подход. по крайней мере в базовых классах (например, InventMovement и потомки. например, ledgerjournalengine). и я бы не сказал, что методичное применение такого подхода сильно облегчило жизнь при чтении кода.
Дык, помимо методичности нужна же мудрость! По-моему, InventMovement "слишком много на себя взял": это и механизм параметризации (методы-флажки canBeXX, mustBeXX), и поставщик разнообразных настроек разноски (accountXX, postingXX), и поставщик параметров проводки (transXX), и разного рода бизнес-логика (checkXX, updateXX). Класс должен выполнять четко очерченную роль, а не пытаться делать все и сразу. А LedgerJournalEngine мало того, что пытался заниматься всем подряд (как минимум, смешивал презентационную и бизнес-логику и в 3.0 зачастую не мог работать без ссылки на DS; в 2009-й хоть полегче стало), так еще и является "оберткой" для таблицы строк журналов с кучей полей и потому заведомо обречен на то, что численность его методов будет пропорциональна числу полей в LedgerJournalTrans. Тут уж не до облегчения жизни...
Старый 05.09.2012, 01:24   #3  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Программировать в три прохода. Первый неважно как лишь бы работало. Прототип.
Второй проход рефакторинг с выделением методов и классов. Третий проход при проверке всех вариантов использования, то есть расширение.
Сразу правильный дизайн сделать сложно, легче итерациями.
Но опыт да помогает накидать что- то близкое сразу.
Да и наверное третье и второе лучше поменять местами

Когда просят писать точные спецификации с дизайном для индусов, я трачу больше времени чем бы запрограммировал сам.
Старый 05.09.2012, 01:35   #4  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Анекдот для знающих. Одно слово. "SettleNow". Не смешно но хочется сразу удавиться. И в индусском стиле кодирования такое случается черер раз. Все в один метод. Желательно на контроле. Мир плоский. На черепахе.

Поэтому я часто просто счастлив если виду хоть какое то ООП, бог с ним с идеальным выделением методов. Хотя очень часто приходиться вырезать чужой код в отдельный метод чтобы вызывать то же а не копировать. То есть то что может запускаться отдельно должно отделяться.
За это сообщение автора поблагодарили: SRF (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Подумайте, чем вы можете мотивировать на переход хорошего квалифицированного аксаптовода pitersky Курилка 48 10.06.2012 21:11
Импорт "собственных" блогов не сохраняет форматирование кода X++ gl00mie Обсуждение форума 4 19.07.2011 21:52
Как распознать хорошего программиста raz Курилка 0 27.01.2009 22:00
"Синий" форум после вставки X++ кода. Maximin Обсуждение форума 1 02.08.2005 12:59
Может не стоит вводить практику вставки кода в виде картинок ? Андре Обсуждение форума 1 27.12.2004 17:49

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 12:20.