Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #41 (permalink)  
Старый 24.12.2014, 14:58
Аспирант
Отправить личное сообщение для kogarashisan Посмотреть профиль Найти все сообщения от kogarashisan
 
Регистрация: 30.06.2014
Сообщений: 36

Давайте по порядку.

Про велосипеды

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

Слой Scope + виды - я переписал раз 10 почти с нуля. И еще несколько раз частично. Причем был такой момент, когда я сказал "ну все, наконец то готово!". А потом достал маленькое требование из бэклога... "ё моё, опять все переделывать". Примерно после 7 раза.

Refresher - 3 раза с нуля
Шаблонизаторы - 3 раза с нуля
Data - 1 раз полностью, и много раз по кусочку
mixin.Observable - 1 раз полностью
Анимация - примерно раза 3...

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

Насчет стиля кода

Локальные переменные у меня именуются через подчеркивание, даже если там лежит функция:
var my_cool_function, my_cool_variable

Но функция из API класса никогда не будет названа my_cool_function, правильно myCoolFunction.

Почему подчеркивание вместо camel: у меня есть серверный PHP движок в разработке, и я взял один стиль чтоб не путаться.

Но примеры, которые привел fancy - они не все из моего кода.
Например, если у меня действительно есть что-то вот такое, то это нужно исправить:
if(n)
   a = 5;


В моем коде есть такие штуки, но в одну строку - в основном DEBUG проверки. Если к ним добавить скобки и разнести на 3 - то код становится практически нечитаемым, пробовал.

У меня всегда один var на функцию. Исключение - пример todo_app - им так нравится, и это их правила. Есть хорошая причина использовать один var на функцию - variable hoisting.
http://designpepper.com/blog/drips/v...ction-hoisting
Помогает избежать ошибок.

Приватные методы

Приватный метод - это не тот метод, который используется внутри фреймворка. Приватный метод - это метод, который нельзя вызывать извне. Тут у меня закралось подозрение, что вы, fancy, никогда не программировали на C++...

Если во фреймворке есть код, который используется только внутри фреймворка - то это мусорный код. У меня весь код - для программиста. Все методы в моих классах, даже приватные - можно переопределить (во всем фреймворке есть всего 3 исключения, которые нужно будет пометить как final, когда добавлю поддержку в ClassManager).

Надеюсь, правильно понял.

Насчет MooTools - мне тоже не нравится что он расширяет прототипы глобальных объектов.
Поэтому у меня есть Firestorm. Со временем я буду переписывать MooTools и переносить его функциональность в Firestorm, и там будет все как вы и написали. Когда тесты будут.

Про жесть

this.Text$broadcastInDOM();


О, это вызов родительского метода. Так работает моя система классов. И благодаря этому она такая быстрая. Предлагаю разобраться по учебникам. Если будут предложения получше, когда разберетесь - пишите.

var element = this._input_container.getDOMElement();


Тут все в полном порядке. "_input_container" - приватная переменная, getDOMElement - публичная функция. Все вместе - часть красивой и гибкой Системы. Что с этим не так?

API у меня - произведение искусства. Но не современного, в котором каждая мусорка это искусство, а старого. Когда люди еще читали книги про рефакторинг, паттерны, и шарили C++.

"пробуй себя в js в Москве"
Думаю, еще успею. И я уже давно не студент.
Кстати, mail.ru и Яндекс - это фактически иностранные фирмы на российском рынке.

Последний раз редактировалось kogarashisan, 24.12.2014 в 15:21.
Ответить с цитированием
  #42 (permalink)  
Старый 24.12.2014, 15:36
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от kogarashisan
Почему подчеркивание вместо camel: у меня есть серверный PHP движок в разработке, и я взял один стиль чтоб не путаться
А у меня нет PHP движка и мне твой стиль буэээ К сожалению, люди приходят в js и не могут понять, что там другой стиль кода и продолжают бомбить в своем.

Я не против - пиши сколько угодно для себя. Но, если ты хочешь, чтобы твой код использовали другие, будь любезен camelCase.
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #43 (permalink)  
Старый 24.12.2014, 16:08
Аватар для Safort
Профессор
Отправить личное сообщение для Safort Посмотреть профиль Найти все сообщения от Safort
 
Регистрация: 23.12.2013
Сообщений: 1,856

kogarashisan,
Цитата:
Почему подчеркивание вместо camel: у меня есть серверный PHP движок в разработке, и я взял один стиль чтоб не путаться.
Просто в js-сообществе так принято.
Ответить с цитированием
  #44 (permalink)  
Старый 24.12.2014, 16:24
Аспирант
Отправить личное сообщение для fancy Посмотреть профиль Найти все сообщения от fancy
 
Регистрация: 16.12.2014
Сообщений: 67

Сообщение от nerv_ Посмотреть сообщение
А у меня нет PHP движка и мне твой стиль буэээ К сожалению, люди приходят в js и не могут понять, что там другой стиль кода и продолжают бомбить в своем.

Я не против - пиши сколько угодно для себя. Но, если ты хочешь, чтобы твой код использовали другие, будь любезен camelCase.
Сообщение от Safort Посмотреть сообщение
kogarashisan,

Просто в js-сообществе так принято.
+1

Хочешь чтобы начали пользоваться люди, пиши в js стиле, а не в PHP или perl.

Единственное что крутое в твоем проекте, это сам факт, что ты делаешь аналог Angular.
Начни с нормального API, а уж потом можешь говорить что у тебя что-то супер мега классное

Мне очень нравится MooTools, но я не пользуюсь им именно из-за 2 ньюасов в API.

Воспринимай посты на форуме как советы от опытных разработчиков, которые хотят тебе помочь

Последний раз редактировалось fancy, 24.12.2014 в 16:34.
Ответить с цитированием
  #45 (permalink)  
Старый 24.12.2014, 16:42
Аспирант
Отправить личное сообщение для kogarashisan Посмотреть профиль Найти все сообщения от kogarashisan
 
Регистрация: 30.06.2014
Сообщений: 36

Вы услышаны. Я подумаю, что с этим делать.

Сообщение от fancy
Начни с нормального API, а уж потом можешь говорить что у тебя что-то супер мега классное
Главное что в функциональном плане с ним все в порядке.

Сообщение от fancy
Единственное что крутое в твоем проекте, это сам факт, что ты делаешь аналог Angular.
"единственное"? и не просто "аналог", а лучший аналог.
Ответить с цитированием
  #46 (permalink)  
Старый 24.12.2014, 16:52
Аспирант
Отправить личное сообщение для fancy Посмотреть профиль Найти все сообщения от fancy
 
Регистрация: 16.12.2014
Сообщений: 67

Сообщение от kogarashisan Посмотреть сообщение

Приватный метод - это не тот метод, который используется внутри фреймворка. Приватный метод - это метод, который нельзя вызывать извне. Тут у меня закралось подозрение, что вы, fancy, никогда не программировали на C++...

API у меня - произведение искусства. Но не современного, в котором каждая мусорка это искусство, а старого. Когда люди еще читали книги про рефакторинг, паттерны, и шарили C++.
В далеком прошлом, 2 года использовал C++.
Знал очень многое про него.
Сейчас немогу уже вспомнить элементарные вещи из него.
Это как с иностранным языком, не изучаешь забываешь так как будто и не учил.

Паттерны и шаблоны проектирования изучал очень серьезно.
Скажу дилетантский языком.
Для RIA - достаточно классов, ClassManager по типу виджетов и задач, Observe, Template - вроде все... непомню, чтобы еще какие то особо пригодились.
А еще для данных, простым языком MVC.
Но я пользуюсь свои модифировнным вариантом MVC.
Короче просто модели и все)) и без всей мути с контролемами и view.
Долго описывать как это ))
А так можно и Adapter и proxy еще использовать.
Я не готовился выступать про Design Patterns на конференции
Чтобы дать аккадемический ответ, надо дня 3 все повторить.
Паттернов штук 200, только нужны из них максимум 5-7.
Чем проще тем лучше.
Вон C11 Standart в 1500 страниц, даже из профи мало кто читал.

Поищу про _, с терминами и т.д., чтобы не звучало по дилетантски.

Последний раз редактировалось fancy, 24.12.2014 в 17:03.
Ответить с цитированием
  #47 (permalink)  
Старый 24.12.2014, 17:01
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от fancy
Короче просто модели и все)) и без всей мути с контролемами и view.
flux, russian edition
Ответить с цитированием
  #48 (permalink)  
Старый 24.12.2014, 21:23
Аспирант
Отправить личное сообщение для fancy Посмотреть профиль Найти все сообщения от fancy
 
Регистрация: 16.12.2014
Сообщений: 67

Опять сумбур. Но нет времени делать классный анализ и выкладки.

Сообщение от fancy Посмотреть сообщение
Поищу про _, с терминами и т.д., чтобы не звучало по дилетантски.
Просмотрел несколько книг, никак найти не могу.
Толи в книге Мука по ActionScript видел, то ли в Definite JavaScript Guide 6.

Придется дилетантски опять объяснять и повторить то что писал.
Если есть кто помнит исправьте.
Вроде именно private методы принято начинать с _.
Т.е. этот метод точно не будет для API.
Но я таким подходом не пользуюсь.
даже private методы у меня идут без _.
А у вас, как было ранее сказано методы для API c _.

Отдельно стоит сказать про использование $ в методах и переменных.
Тоже советую этим пользоваться, в самом крайнем случае.
У меня это используется только в этом месте.
Для классов, для внутреннего именования класса.
Т.е. предположим класс называется, напишу в стиле MooTools, как оно должно быть, а не как сейчас.

Mt.Class('Mt.Panel', {
   extend: Mt.Event/Mt.Observe, либо 'Mt.Event'


Так вот внутри класса у меня идет определение названия класса
$class: 'Mt.Panel'


Теперь еще раз про слишком длинные названия методов.
var element = this._input_container.getDOMElement();


Можно ввести внутри фреймворка список кратких названий переменных.
Итог, делаем красиво
var el = this.inputEl;

слишком красиво...

Надо сокращять длинные названия. Не все.
Но уж совсем элементарные вроде
this.getElement()
делаем хотя бы
this.getEl()
Это настолько очевидно и просто, что El - это Element


Еще один момент, уж думайте сами нужно вам или нет
Я пользуюсь
Ссылка на this.
Сейчас если и пользуются такой ссылкой то через "self'
var self = this;

   self.show();


Я вместо self, использую me.
Не помню уже где первый раз это встретил.
Но это делает код мега красивым и удобным.
var me = this;

   me.show();


Еще один плюс таких ссылок, особенно для ООП библиотек, которые
в методе раз 5 - 20 обращаются к друг методам или свойствам -
сокращение код.

Все способы которые есть для уменьшения код, я использую - делает на ~30% код меньше ...
Т.е. весит проект minified до такой оптимизации 300кб, а после оптимизации 210-250$
Для меня это было критично.

Последний раз редактировалось fancy, 24.12.2014 в 21:28.
Ответить с цитированием
  #49 (permalink)  
Старый 24.12.2014, 21:45
Аспирант
Отправить личное сообщение для fancy Посмотреть профиль Найти все сообщения от fancy
 
Регистрация: 16.12.2014
Сообщений: 67

Сообщение от melky Посмотреть сообщение
flux, russian edition
Не думаю.
Этот flux все равно слишком многое делает сложно.
Скорее у меня более красивый подход внутренней RIA либы
на которой вконтакт работает.
При желание можете покопаться как у них там что)))

Только у меня все в разы красивей ))
И я не пользуюсь require как они, нет необходимости.
хотя им без require никак.

У них вместо шаблонизации, как то так

.innerHTML = '<div class="class-name">' +
myVar +
....;

Вот и вам и ответ на виртуализацию DOM, которая в React.


Про React хочу сказать.
То что они преподносят как прорыв, не факт что таковым является да круто... Но на деле, полный rerender редко когда нужен.
И никто не будет каждые 1-5 секунд делать rerender 5000 + строк для table например.
Не знаю на чем работает facebook, какая js либа, но vk гораздо быстрей за счет клиентского рендеринга и кучи фишек.
У них вообще очень много классно сделано.
Помню у меня была своя fx либа - css3 не решает до сих пор всех моментов, приходится иметь свое решение.
Так вот, у них fx сделано так красиво и просто.
не ожидал такого решения.
Молодцы.

Иногда чувствую себя внештатным сотрудником контакта )))
Я их код вдоль и поперек изучил))
Некоторые моменты исправил бы, но все равно их код классный...
На их внутренней либе можно делать полноценный продукт, который может стать лучше всех современных JS UI фреймворков.
Ответить с цитированием
  #50 (permalink)  
Старый 24.12.2014, 21:55
Аспирант
Отправить личное сообщение для fancy Посмотреть профиль Найти все сообщения от fancy
 
Регистрация: 16.12.2014
Сообщений: 67

Еще про React
Уж раз про него заговорили

Минус первый.
Это тоже самое что CoffeeScript только не в стиле ruby и только ради того чтобы писать вот это
React.render(<MarkdownEditor />, mountNode);


render: function() {
    return (
      <div className="MarkdownEditor">
        <h3>Input</h3>
        <textarea
          onChange={this.handleChange}
          ref="textarea"
          defaultValue={this.state.value} />
        <h3>Output</h3>
        <div
          className="content"
          dangerouslySetInnerHTML={{
            __html: converter.makeHtml(this.state.value)
          }}
        />
      </div>
    );
  }


Ладно может так надо было, но идем дальше.
Во что они превращают это

Минус два
render: function() {
    return (
      React.createElement("div", null, 
        React.createElement("h3", null, "TODO"), 
        React.createElement(TodoList, {items: this.state.items}), 
        React.createElement("form", {onSubmit: this.handleSubmit}, 
          React.createElement("input", {onChange: this.onChange, value: this.state.text}), 
          React.createElement("button", null, 'Add #' + (this.state.items.length + 1))
        )
      )
    );
  }


Это ж получается для каждого тега надо вызвать функцию, и думаю не маленькую.
Повторю их заявление, что типа мы берем и просто все перерендерим.
Что это значит?
Это значит что еще надо заново поставить обработчики событий на dom.

И где тут прорыв в производительности?
Они такой гемор*** делают из очень простой задачи.

Последний раз редактировалось fancy, 24.12.2014 в 22:13.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SetInterval в MVC! Важно! espltd AJAX и COMET 3 08.04.2014 12:49
Drag and Drop, Grids, MVC Pro100tom Элементы интерфейса 0 25.07.2013 12:05
Не получается подключить Cufon к сайту на ASP.NET MVC Heidel jQuery 1 17.04.2013 14:32
Как правильно загрузить через framework Mateus jQuery 5 11.01.2013 20:08
Архитектура, MVC и т.п. (Sandr) Серверные языки и технологии 0 26.02.2012 16:24