Skip to content

Instantly share code, notes, and snippets.

@dy
Last active August 29, 2015 14:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dy/c249d5959842a4a4468f to your computer and use it in GitHub Desktop.
Save dy/c249d5959842a4a4468f to your computer and use it in GitHub Desktop.
Фидбек по zn_gauge
  1. Прежде всего вам стоит подтянуть свой английский, особенно письменный. Вы будете работать с другими разработчиками, и если вы не будете относиться серьезно к чистоте терминов - возникнут ненужные сложности в коммуникации и понимании. Стоит научиться не делать не только письменных, но и концептуальных ошибок:
  • lenght, а length
  • lengthScale, а lastNumber (scale вообще про масштаб, и измеряется от 1±).
  • не numberInACircle, а numberIsInsideCircle, а еще лучше inset (см. пункт 5)
  • не idElement, а elementId, а еще лучше element (см. пункт 5)
  • canvasDrow, но numbersDraw
  • numberstap, valueFalseNum, valueFalsePer
  1. Посмотрите на примеры хорошего кода: tooltip, spinner и прочие. Вы заметите, что у этого кода есть особенности:
  • в нем присутствуют jsdoc аннотации
  • в нем краткие методы, вмещающиеся на 1 экран
  • код сгруппирован по логическим блокам для удобства чтения
  • код прогнан по jshint.
Научитесь писать так же, а лучше - лучше. Самый простой способ проверить качество своего кода - https://codeclimate.com/
  1. Вам необязательно было дублировать код для jquery - достаточно было сделать обертку над gauge.js. Пример в dropzone.

  2. Изучите, как устроен package.json, как его создавать, для чего в нем те или иные поля, как использовать npm. Возможно вы откроете для себя, что вам не нужен grunt для минимизации js-файлов.

  • Все, что вы поместили в dependencies, следовало поместить в devDependencies - теперь все ваши grunt-зависимости будут устанавливаться вместе с вашим плагином, хотя они никому не нужны для использования.
  1. Проектирование API. Почитайте статью по проектированию API.
  • Конструктор должен уметь инициализировать любой переданный элемент с любыми переданными опциями: new Gauge(element, options). Тогда отпала бы надобность в idElement, a о внутреннем canvas пользователю вообще знать ни к чему.
  • Старайтесь не помещать в опции настройки, касающиеся стилей - fonts, arrowColor, diameter, canvasSize. Если это возможно поместить в css - помещайте это туда. Вашего случая это касается косвенно, но diameter, canvasSize, font и color можно было автоматически брать из стиля элемента, на котором инициализируется gauge.
  • Опции следует стараться делать максимально гибкими и простыми для конечного пользователя, а не максимально детальными. В частности, достаточно было иметь values со списком значений, которые расставить по шкале, чем плеяду isPercent, firstNumber, lengthScale, percent/number step. Эти программные значения нужны вам, но пользователю вашего плагина они ни к чему.
  • Названия опций следует брать максимально близкими к существующим терминам из ментальной модели пользователя - не fonts, a font, как css-свойство; не isInsideCircle, а inset, как у box-shadow. И т. п.
  • Названия функций/методов должны быть глаголами.
  1. Приучите себя создавать README.md с обязательной ключевой фразой: {{ title }} is a {{ what }} for {{ who for/where to use }} by {{ unique feature }} written in {{ JavaScript }}, can be used in {{ target platforms }}.

Также для самоознакомления и проверки знаний — superherojs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment