Цитата:
Цитата:
Цитата:
|
Цитата:
Если ты про моменты, типа: Цитата:
Цитата:
Цитата:
Цитата:
Если заменить в этом предложении слова "рисовать" на "писать" и "диаграммы" на "программы", то можно добавить в RTFM и скидывать всем новичкам, зашедшим на этот форум. Меня ещё вот что интересует. Для тебя этот инструмент бесполезный потому что не знаешь что рисовать или потому что не умеешь? |
Цитата:
Цитата:
Цитата:
|
Цитата:
Вообще, опять же, пост не про это. Но можно развить эту тему, раз уж никто не понимает смысла. Но я не могу один это делать, необходима поддержка и поправка сообщества. Попробую начать. Цитата:
Ещё один редкий случай - сложная логика компонента, который необходимо постоянно использовать. Я понимаю, что этого стоит избегать, но ситуации бывают разные. Словесное описание в этом случае не даст полного представления, а диаграмма дополнит его. В этом случае польза будет в том, что новый человек сможет быстрее вникнуть в суть, а это важно в крупных командах/компаниях. Пример из жизни - реализация функции require, подобной из NodeJS. Логика в ней более ветвистая, чем в NodeJS, могу скинуть диаграмму. После создания схемы стало очевидно, что описывать словами её работу будет бесполезным - диаграмма в данном случае наиболее удачно решила эту задачу. При этом, в ней нет лишнего функционала, логика не перегружена. Я могу привести ещё примеры из практики, если надо. |
![]() |
:D
|
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
/* @startuml title Require. note top: require(namespace); (*) -right-> if "" then note top: The module\nis in the cache?? --> [true] "Return module" as Return --> (*) else -right-> [false] if "" then note top: Start with\n'docroot://'? --> [true] "Load file from\n<b>namespace</b>" --> [Success] "Initialization module.\nSave module in cache." as Compile --> Return else -right-> [false] if "" then note top: There is a file\nwith the name\n<b>namespace</b> + '.js'? --> [true] "Load file from\n<b>namespace</b> + '.js'" --> [Success] "Create namespace" as CreateNS --> Compile else -right-> [false] if "" then note top: There is a file\nwith the name\n<b>namespace</b> + '/package.json'? --> [true] "Parse file from\n<b>namespace</b> + '/package.json'" --> [Success] "Load the file,\nspecified in the package.json" note right: Default file name is\n<b>namespace</b> + '.js' --> [Success] CreateNS else --> (*) endif endif endif endif @enduml */ var require = (function () { var CACHE = {}; var OPTIONS = { root: 'docroot://', extension: 'js', packageName: 'package.json' }; function extendOptions () { if (!require.hasOwnProperty('options')) { require.options = {}; } for (var name in OPTIONS) { if (OPTIONS.hasOwnProperty(name) && !require.options.hasOwnProperty(name)) { require.options[name] = OPTIONS[name]; } } } function createNamespace (namespace, module) { namespace = namespace.split('.'); var name, index = 0, length = namespace.length, currentNamespace = $XM; while (index < length) { name = namespace[index++]; if (index === length) { currentNamespace[name] = module; } else if (!currentNamespace.hasOwnProperty(name)) { currentNamespace[name] = {}; } currentNamespace = currentNamespace[name]; } } function require (namespace) { var file, path, main, createNS = true, module = { namespace: namespace, exports: {} }; if (CACHE.hasOwnProperty(namespace)) { return CACHE[namespace]; } extendOptions(); if (namespace.indexOf('docroot://') === 0) { if ($X.file.test(namespace)) { file = $X.file.load(namespace); createNS = false; path = namespace; delete module.namespace; } else { throw new Error('Can`t find module on the way: "' + namespace + '"'); } } else if ($X.file.test(path = require.options.root + namespace + '.' + require.options.extension)) { file = $X.file.load(path); } else if ($X.file.test(path = require.options.root + namespace + '/' + require.options.packageName)) {package.json file = $X.file.load(path); file = JSON.parse(file); main = file.hasOwnProperty('main') ? file.main : namespace + '.' + require.options.extension; if ($X.file.test(path = require.options.root + namespace + '/' + main)) { file = $X.file.load(path); } else { throw new Error('Can`t find module: "' + path + '"'); } } else { throw new Error('Can`t find module: "' + namespace + '"'); } module.path = path; module.dirName = path.substring(0, path.lastIndexOf('/')); new Function('module', file).call(module.exports, module); createNS === true && createNamespace(namespace, module.exports); CACHE[namespace] = module.exports; return module.exports; } extendOptions(); return require; })(); ![]() |
Тема интересная, но я лично пока не дорос до рисования таких схем прямо в коде или отдельной софтине. Пока хватает нарисовать диаграмму или блок схему в блокноте на бумаге, быстрее и легче воспринимается. Я так понимаю что данная тулза полезна при описании больших фронт-эндов или серверной части?
Мне гораздо интереснее практическая реализация Юнит-тестов для JS. В моей отрасли эта тема куда важнее для продакшена (софт обязательно должен быть валидирован) чем диаграммы. Пока ничего толкового не нашел кроме Jasmine. Где-то тема от x-yuri проскакивала на форуме по этому поводу... Вот если бы этот вопрос раскрыли в полной мере... мммм... было бы просто зашибись :) |
Цитата:
По поводу тестов, есть свежая библиотека от monolithed, стоит посмотреть. Цитата:
|
Часовой пояс GMT +3, время: 02:49. |