Цитата:
Цитата:
Цитата:
|
Цитата:
Если ты про моменты, типа: Цитата:
Цитата:
Цитата:
Цитата:
Если заменить в этом предложении слова "рисовать" на "писать" и "диаграммы" на "программы", то можно добавить в 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, время: 15:24. |