?

Log in

No account? Create an account
 
 
01 October 2011 @ 09:18 am
Подумалось  
Хорошая архитектура кода - это когда добавление нового функционала имеет линейную сложность. Плохая - экспоненциальную.
Есс-сно, условие необходимое, но не достаточное. ;)
 
 
 
Сергей Орловos80 on October 1st, 2011 08:08 am (UTC)
Хорошая - это когла логарифмическую. Ну или хотя бы корень квадратный.
Христофор Арьефfreeborn on October 2nd, 2011 02:22 am (UTC)
O(1) наше всё
Дмитрий Тюревdtjurev on October 2nd, 2011 07:29 am (UTC)
То есть, добавление каждой новой фичи - легче, чем предыдущей? Не, я тоже хочу жить в идеальном мире, но мне всё время подсовывают реальный. ;)
Сергей Орловos80 on October 4th, 2011 08:23 pm (UTC)
У меня на реальных проектах всегда так (но всё же не корень квадратный). При этом назвать нашу/свою архитектуру хотя бы сносной хотя бы в рекламном ролике у меня не повернётся язык.
отражение жизни в экране монитораrainman_rocks on October 2nd, 2011 12:14 am (UTC)
Линейную от чего?

Ну и вообще, экспонента тут ни при чём. В традиционном "плохом" случае, когда новый код надо увязывать со ВСЕМ старым, сложность добавления линейна от количества уже существующих "модулей" - т.е. интегрально будет квадратичная. Закон "сетевого эффекта".
Дмитрий Тюревdtjurev on October 2nd, 2011 07:27 am (UTC)
Линейную от количества добавляемых фич. Ну, то есть, сложность добавления каждой новой фичи постоянна, поскольку её не нужно увязывать со всеми старыми фичами, как вы говорите.
(Anonymous) on October 2nd, 2011 12:00 pm (UTC)
Если каждую новую фичу нужно увязывать с не более, чем 100500 старыми фичами, то время добавления фичи будет по-прежнему O(1), и время разработки проекта O(n), где n — количество фич, но я бы предпочел не работать над таким проектом. Devil is in the constants.
Дмитрий Тюревdtjurev on October 2nd, 2011 04:28 pm (UTC)
Тоже верно.
Сергей Орловos80 on October 4th, 2011 08:26 pm (UTC)
Ну вот что за желание сделать удобно себе в ущерб другим? Кому нужны Ваши фичи, не увязанные с предыдущими? В смысле - если фичи не нужно увязывать с предыдущими, то Вы просто "хуячите код", а не "развиваете систему".
GeniU$geniusua on October 2nd, 2011 08:43 pm (UTC)
Не только добавление, но и поддержка текущего функционала. Т.е. это способность кода поддаваться своевременному, не затягивающему на долгие часы, багфиксу. Багфиксу именно основного функционала системы, где при условии плохой архитектуры кода будет много копипастов и логически несвязанных блоков (например, злоупотребление string'ами)
Дмитрий Тюревdtjurev on October 4th, 2011 07:18 pm (UTC)
А можно подробнее, про злоупотребление стрингами? Чем это плохо?
GeniU$geniusua on October 4th, 2011 08:38 pm (UTC)
Много разных проблем возникает из-за стрингов. В дотнете, например, это <%Eval("PropertyName")%> в ASPX коде. А потом легкий рефакторинг, и падение сайта в последствии.
vmccaskeyvmccaskey on October 4th, 2011 06:31 pm (UTC)
ну да. В Вашей интерпретации линейная сложность означает, что усилия тратятся только на производство нового кода, но НЕ на регрессионные тесты. Положим, мы управляем поведением объекта путем изменения значений его свойств (properties), и добавления новых свойств. Тогда нам желательно, чтобы свойства объекта были максимально нормализованы, т.е. не было зависимостей между ними. Новое свойство добавляется в класс, только если оно описывает принципиально новую сторону поведения, и все существующие экземпляры этого класса могут продолжать жить со значением нового свойства, принятым по умолчнанию. Тогда мы на 100% уверены, что регрессионный тест не понадобится.