среда, 1 августа 2012 г.

module: code style

Стандарты кодирования (именование, разбиение на сущности, форматирования) в корпоративных Java-проектах

    
    Роберт Мартин «Чистый код. Создание, анализ и рефакторинг»
    В целом неплохая книга, хотя из-за того, что разные главы написаны разными авторами — различные стили и «различная польза».
    Для нас особенно полезны:
    Глава 2: Содержательные имена
    Основная идея: именование сущностей — важнейшая работа, это не только описание что делает эта функция, но и указание на способы и цели использования в дальнейшем. Рассказано о различных подходах к именованию: использовать имена из пространства задачи, использовать имена из пространства решений, ставить имена в соответствие концепциям, добавлять содержательный контекст.
    Глава 3: Функции
    Основная идея: выделяя блок кода в функцию, мы не просто создаем именованную функциональность, но также определяем отдельную сущность для тестирования, изменения, повторного использования. Рекомендуется использование одной операции на функцию, поддержание уровня абстракции в рамках одной функции, разделение функций на команды и запросы.
    Глава 5: Форматирование
    Основная идея: Рассматривайте код класса, как текст, как газетную статью к прочтению другими членами команды. Рекомендуется использование газетной метафоры: располагайте важный материал выше, располагайте вызываемые функции выше вызываемых, каждый класс — одна тема, один рассказ, одна история. Другая история — другой класс.

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

        Код "с душком" - код, содержащий "запах" распада структурированности, этого сопутствующего фактора быстрых изменений в коде, связанных с краткосрочными целями и производимых без полного понимания организации.

    "Применение рефакторинга при разработке программного обеспечения разделяет время между двумя разными видами деятельности – вводом новых функций и изменением структуры."

    "Утрата кодом структурности носит кумулятивный характер. Чем сложнее разобраться во внутреннем устройстве кода, тем труднее его сохранить и тем быстрее происходит его распад."

    "Структурщики знают, что хорошую структуру удается создать не сразу – она должна развиваться по мере накопления опыта."

    "Компилятору все равно, красив код или нет. Но в процессе внесения изменений в систему участвуют люди, которым это не безразлично. Плохо спроектированную систему трудно модифицировать. Трудно потому, что нелегко понять, где изменения нужны. Если трудно понять, что должно быть изменено, то есть большая вероятность, что программист ошибется."

    "Когда фрагменты кода невелики, облегчается управление. С такими фрагментами проще работать и перемещать их."





    Кент Бек «Шаблоны реализации корпоративных приложений»        

    "Каждая глава этой книги содержит прекрасные объяснения и проникает в самую суть маленьких, но важных решений, постоянно принимаемых нами, когда мы создаем код и классы". 

    "Многие люди не понимают, насколько читабельным может быть код и насколько ценна эта читабельность". 


    "Шаблоны реализации заполняют пробел между проектированием и   программированием". 

    "Язык Java предоставляет ответы в форме базовых конструкций. Программистам обычно нужно выразить вопросы для самих себя, понять, какие проблемы решаются каждой конструкцией языка."

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

    "Цель этой книги — помочь вам передать ваши замыслы в коде."

    "Общие ограничения к именованию всегда те же: вы должны донести назначение, тип и время жизни переменной до читателей, вы должны выбрать легко читаемое имя, вы должны выбрать имя, которое легко писать и форматировать. Добавьте к этому общие ограничения к специфике отдельной переменной, и вы получите ее рабочее имя."

    "Эта книга находится где-то посередине между книгой Шаблоны проектирования (Design Patterns) и руководством по Java. В книге о шаблонах проектирования речь идет о решениях, которые принимаются по несколько раз в день во время разработки приложений, обычно относящихся к регулировке взаимодействий между объектами. Вы применяете шаблоны реализации каждые несколько секунд, когда программируете. В то время как руководства по языку хороши для описания того, что вы можете сделать на Java, в них не говорится, почему вам следует использовать определенную конструкцию кода, или о выводах, которые может сделать кто-то, читающий ваш код."

    "Факторы предсказуемо повторяются и являются основой того, что возникает желание создать шаблон, поскольку это шаблон реакций на повторяющиеся факторы."

    "Эти три вещи — ценности, принципы и шаблоны — формируют уравновешенное выражение стиля программирования. Шаблоны описывают действие. Ценности дают мотивацию. Принципы помогают претворить побуждение в действие."

    "Однако зачастую сложность отражает следы борьбы, которую мы вели за то, чтобы заставить программу  вообще заработать. Эта избыточная сложность обесценивает программное обеспечение, делая его менее стабильным, а внесение изменений — более трудоемким. В   программировании полезно переоценивать проделанную работу, чтобы отделить зерна от плевел."

    "Принципы — это следующий уровень общих идей, имеющий больше отношения к программированию, чем ценности. Принципы также являются основой шаблонов.
    Изучение принципов имеет смысл по нескольким причинам. Ясные и  
понятные принципы могут порождать новые шаблоны, так же как периодическая таблица Менделеева привела к открытию новых элементов. Принципы раскрывают причины использования того или иного шаблона в более общем виде, чем какие-то конкретные идеи. Выбор из нескольких противоречащих друг другу шаблонов часто лучше обсуждать в терминах принципов, чем непосредственной специфики ситуации. Наконец, понимание принципов позволяет лучше находить решения при столкновении с новой проблемой."

    "Внятные сведения о том, какие части программы идентичны, какие достаточно похожи, а какие полностью различны, делают программы более читаемыми и легко модифицируемыми."

    "Другой принцип, лежащий в основе шаблонов реализации, — это передача своих замыслов описательным способом. Императивное программирование —  мощный и гибкий инструмент, но чтение программы, написанной в этом стиле, требует следовать за нитью исполнения. Приходится строить умозрительную модель  состояния программы, процесса и данных. Те же части программы, являющие "вещь в себе", без последовательностей или условий, содержат более простой,   описательный код."

    "Частота изменений — это приложение симметрии, хотя и временной. В   приведенном примере два оригинальных поля, value и currency, симметричны. Они меняются одновременно. Однако они не симметричны относительно других полей объекта. Выражение симметричности путем помещения их в отдельный объект передает их взаимоотношение читателям и, скорее всего, предоставляет дальнейшие   возможности для устранения дублирования и локализации последствий."