28.08.2010, 21:48
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
Сообщение от B~Vladi
|
Ну он [Команда] хорошо подходит на это место. Контроллер будет командовать. Реализация не сложная. Конечно, я готов рассмотреть другие варианты.
|
там учавствуют три объекта. Виды, один контроллер... кто третий? И главное для чего?
Сообщение от B~Vladi
|
т.е. ты предлагаешь пробрасывать события V <-> C <-> M ?!
|
почему нет? Модель сообщает через контроллер, что изменилось, тем или иным образом. Себя никак не называет. Можно это уведомления на категории (или просто разные события сделать) разбить, на которые виды будут подписываться
Сообщение от B~Vladi
|
Ну да, вообще описание классов, внутреннего функционала. Без каких-то конкретных действий.
|
для элементарных компонентов (которые ближе к разметке, чем к доменной области; какой-нибудь стилизованный input type=file) вряд ли прокатит. Тоже на правах пришедшей в голову мысли
Последний раз редактировалось x-yuri, 28.08.2010 в 21:53.
|
|
28.08.2010, 21:59
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Сообщение от x-yuri
|
почему нет?
|
Да я как бэ не против
Сообщение от x-yuri
|
для элементарных компонентов (которые ближе к разметке, чем к доменной области; какой-нибудь стилизованный input type=file) вряд ли прокатит. Тоже на правах пришедшей в голову мысли
|
Ну я начинаю разработку именно с этого... Описываю компоненты, их взаимодействие, хранение и передачу данных... А потом уже методы, ну и все остальное. Не зависимо от задачи, если она достаточно большая и сложная.
|
|
31.08.2010, 04:33
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
Сообщение от B~Vladi
|
Сначала я опишу каждую составляющую более абстрактно, без привязке к отображению или к чему либо ещё, на какой-нибудь тестовой страничке.
|
Сообщение от B~Vladi
|
Ну да, вообще описание классов, внутреннего функционала. Без каких-то конкретных действий.
|
Сообщение от B~Vladi
|
Ну я начинаю разработку именно с этого... Описываю компоненты, их взаимодействие, хранение и передачу данных... А потом уже методы, ну и все остальное. Не зависимо от задачи, если она достаточно большая и сложная.
|
ты можешь это на каком-то конкретном примере продемонстрировать?
|
|
31.08.2010, 10:42
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Ну вот нашел кусок кода, который находится на той стадии, когда нужно реализовывать взаимодействие с DOM. Логика и обработка данных уже готова.
var Domino = (function(){
var sides = ['top', 'right', 'bottom', 'left'];
// Ajax
function ajax(opt){
var request = XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
request.open(typeof opt.method == 'string' ? opt.method.toLowerCase() : 'GET', opt.url, opt.async != void 0 ? !!opt.async : true);
if(opt.options){
request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
request.setRequestHeader('Content-length', opt.options.length);
request.setRequestHeader('Connection', 'close');
request.send(opt.options);
} else {
request.send(null);
}
setTimeout(function(){
if(opt.callback && request.readyState == 4 && request.status == 200){
opt.callback(new Function('return ' + request.responseText)(), opt.data);
} else {
setTimeout(arguments.callee, 15);
}
}, 0);
}
// Animation
function slideImage(opt){
var steps = Math.floor(opt.time * opt.fps / 1000);
var timeOuts = [];
for(var i = 1; i <= steps; i++){
var time = Math.floor(1000 / opt.fps * i);
timeOuts.push(setTimeout((function(time){
var stop = false;
return function(){
var integer = opt.stop * (time * 100 / opt.time) / 100;
if(opt.call && (stop = opt.call(integer) === false)){
var l = timeOuts.length;
while(l){
clearTimeout(timeOuts[--l]);
}
}
if(stop || opt.stop == integer){
opt = steps = i = l = time = timeOuts = null;
}
}
})(time), time));
}
}
// Test
slideImage({
time: 1500,
fps: 30,
stop: 143
});
function Constructor(opt){
this.options = {};
for(var property in opt){
opt.hasOwnProperty(property) && (this.options[property] = opt[property]);
}
this.data = {
images: [],
nodes: [],
timeStamp: new Date
};
// Наполнение
var node = document.getElementById(opt.id);
var l = (node.clientWidth / this.options.width) * (node.clientHeight / this.options.height);
var fragment = document.createDocumentFragment();
while(l--){
var item = document.createElement('div');
// TODO: -2 убрать
item.style.cssText = 'width:' + (this.options.width-2) + 'px;' +
'height:' + (this.options.height-2) + 'px; border: #f00 1px solid; float:left;';
this.data.nodes.push(item);
fragment.appendChild(item);
}
node.appendChild(fragment);
}
Constructor.prototype = {
start: function(){
var data = this.data;
(function(){
if(!data.images.length){
return;
}
var item = data.images.shift();
if(data.loaded && item.timeStamp != data.timeStamp){
return arguments.callee();
}
var activeNode = data.nodes[Math.floor(Math.random() * data.nodes.length)];
data.images.push(item);
data.timer = setTimeout(arguments.callee, 1000);
})();
},
stop: function(){
clearTimeout(this.data.timer);
},
update: (function(){
function onLoadImage(){
this.data.options.img = this;
this.data.objData.images.unshift(this.data.options);
!this.data.index && (this.data.objData.loaded = true);
delete this.data, this.onload;
}
function onLoadData(result, data){
data.timeStamp = new Date;
var length = result.imgs.length;
while(length){
var item = new Image();
item.data = {
objData: data,
options: result.imgs[--length],
index: length
};
item.timeStamp = data.timeStamp;
item.onload = onLoadImage;
item.src = item.data.options.img;
}
delete data.loaded;
}
return function(url){
ajax({
url: typeof url == 'string' && url.length ? url : this.options.url,
callback: onLoadData,
data: this.data
});
};
})()
};
return Constructor;
})();
var dm = new Domino({
width: 50,
height: 50,
url: 'req.js',
speed: 30,
id: 'contaner'
});
dm.start();
В двух словах, это реализация слайда группы каринок.
Сами картинки не меняются, только обработка данных. Пишется как самостоятельное приложение, без привязки к фреймворкам.
Последний раз редактировалось B~Vladi, 31.08.2010 в 10:52.
|
|
31.08.2010, 12:09
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Это то, что ты просил?
|
|
05.09.2010, 18:01
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
приблизительно
Но ты говорил, про код, не привязанный к отображению. Где граница? Ты создаешь div'ы, назначаешь css-свойства
И что там с Командой? Как участники шаблона проецируются на реальные объекты?
Последний раз редактировалось x-yuri, 05.09.2010 в 18:03.
|
|
05.09.2010, 21:17
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Сообщение от x-yuri
|
Но ты говорил, про код, не привязанный к отображению.
|
Этот код писался в моем "старом" стиле. Вопрос был о стадии разработки приложения.
Сообщение от x-yuri
|
И что там с Командой? Как участники шаблона проецируются на реальные объекты?
|
Этот шаблон не подходит для моих задач. Сейчас архитектура построена на MVC+Observer, причем последний относиться только к модели (взаимодействие на другие модули путем изменения только своих данных - событие update). Доступ и обработка данных осуществляется через API между модулем и хранилищем (контроллер). Так как данные хранятся в html-коде (view), парсингом занимается отображение.
Как будет рабочий прототип, можно будет уже конкретные примеры моделей (модулей) привести и вообще схему всей архитектуры.
|
|
19.10.2010, 15:40
|
|
猫
|
|
Регистрация: 07.06.2007
Сообщений: 7,504
|
|
B~Vladi,
Хотелось бы поднять старую тему и поинтересоваться, нельзя ли взглянуть одним глазком на прототип?
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
|
|
19.10.2010, 16:29
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Кто-то ещё помнит...
Пока нет.
Архитектура утверждена в плане удобства/универсальности.
Сейчас занимаюсь оптимизацией работы с View (самое узкое место). Удалось реализовать полный парсинг DOM средней страницы (1000 элементов) за 20-30 мс, и это ещё не конец. Т.е. по определённому запросу, я уже могу быстро получать нужные мне данные из хранилища (DOM), но сохранять пока не могу.
Интерфейс работы с моделями готов. Ждет, пока свяжу с контроллером. Самое главное - удалось полностью избавиться от зависимостей между моделями. При этом никаких ограничений на работу с View не возникло.
В общем, дела идут, но сильно медленно, ибо работаю на дядьку
Уже присмотрел один работающий проект для бета-тестирования прототипа. Хочу посмотреть, насколько просто будет интегрирование фреймворка на уже рабочее приложение.
Я вас обязательно попрошу принять участие в бета-тестировании, больше мне надеяцо ненакого
Последний раз редактировалось B~Vladi, 19.10.2010 в 16:32.
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Google Chart API |
mycoding |
Оффтопик |
0 |
14.07.2010 11:22 |
|
|
|