All streams
Search
Write a publication
Pull to refresh
0
0
ness @ness

User

Send message
Спасибо за статью :)

К автору есть несколько вопросов.

как быть, если задачи связаны? И нет смысла выкладывать на сервер одну без решения другой — заказчику не принесет это ценности.

К примеру, тривиальная система по обработке заказов: клиент регистрируется, формирует заказ,
отправляет заказ, менеджер его обрабатывает, посылает запрос складу, склад формирует накладные,
отправляет заказ клиенту, потом менеджер фиксирует факт оплаты и закрывает заказ.

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

Можно, допустим, предварительно сделать детальное проектирование всего, но,
как известно, это не круто :)

Второй вопрос:
данная система предполагает, что задачи делаются и вычеркиваются из списка последовательно.
Но часто бывает следующее:
Задача1, Задача2, Задача3 — связаны.
И оптимальный, возможно :), путь решения — реализовать 70% функционала каждой задачи, после чего
выпустить релиз. А остальное доделать в следующей итерации(-ях).

Как вы поступаете в таких случаях?
Очень хорошо на эту тему для начинающих написано тут:
Разумно о фото 2009
Есть еще вариант — 111 в двоичной, тогда:
111 + 1 = 1000
Рассказывать очень долго, т.к. выбирали тоже долго :)
В двух словах:
очень удачно и удобно сочетается с DDD, хорошо поддерживает LINQ (ну или процедурный стиль), при этом
быстро работает, хороший саппорт.

Рекомендую почитать немного документацию, чтобы понять подход, а также
принципы сущностей. Разработчики считают, что Persistence Ignorance
не всегда удачная модель и использую т.н. Persistence Awareness.

Вот хорошая статья о принципиальной разнице между NHibernate и DataObjects.
blog.dataobjects.net/2010/11/dataobjectsnet-vs-nhibernate-conceptual.html

Да, и еще — разработчики с Екатеринбурга :)
Не холивара ради, но:
ormeter.net/

Мы выбрали для себя DataObjects.net
«через чур» -> ученик средней школы, имхо :)

>Это, скорее, уже обычное дело, что программист умеет верстать.
>… то это через чур накладно

Вы фрилансер?
По вашему, программист=верстальщик?

Или под «понимать js» имелось ввиду что-то другое?
Серверный шаблонизатор там есть, фактически это ASP.NET.

Но мы же говорим о яваскрипте и об аяксе, вот тут-то и возникает момент,
что генерить html на сервере и передавать клиенту, по-моему, неудобно.
Как, к примеру, происходит работа у нас.

Есть верстальщик, он же частично понимает яваскрипт/jquery.

Есть программист.

Итак, программист написал на c# серверный код, который отдает созданный объект клиенту,
ответ на аяксный запрос.

Когда отдается html: верстальщику надо копаться в сишарпном коде,
есть вероятность что-то сломать, кроме того он видит кусок кода в изоляции от всего остального.

Также неудобно дописывать html — вижуал студия не комплитит html в сишарпном коде.

Также нет комплита и автозакрытия тегов, а также подстановки стилей и т.п. в такой конструкции:


var code = String.Format("<li><a href\"={0}\">Ссылка на продукт {1}</a></li>", Obj.Link, Obj.Text);


Да, можно использовать подгрузку html из файла, в котором уже расставлены плейсхолдеры,
но при этом возникает минус: если файл очень большой, тогда клиент каждый раз при запросе
получает этот же большой файл.

Который явно больше, чем Json того же объекта для подстановки.

Если весь код на клиенте, то:
1) верстальщик копает только в одном месте
2) сломать труднее: синтаксис шаблонизаторов достаточно прост даже для непрограммиста
3) нет нужды каждый раз грузить громоздкий код с сервера, json компактнее
4) править представление можно даже в том случае, если нет доступа к серверному коду
или же там был произведен рефакторинг/изменение, которое повлияло на принцип создания объекта

Немного сумбурно, может, но вот, проиллюстрирую кодом с phpMyAdmin.

Хотя тут не про яваскрипт речь, но все же.


 echo '<form action="./server_databases.php" method="post" name="dbStatsForm" id="dbStatsForm">' . "\n"
       . PMA_generate_common_hidden_inputs($_url_params);

    $_url_params['sort_by'] = 'SCHEMA_NAME';
    $_url_params['sort_order'] = ($sort_by == 'SCHEMA_NAME' && $sort_order == 'asc') ? 'desc' : 'asc';

    echo '<table id="tabledatabases" class="data">' . "\n"
       . '<thead>' . "\n"
       . '<tr>' . "\n"
       . ($is_superuser || $cfg['AllowUserDropDatabase'] ? '        <th> </th>' . "\n" : '')
       . '    <th><a href="./server_databases.php' . PMA_generate_common_url($_url_params) . '">' . "\n"
       . '            ' . $strDatabase . "\n"
       . ($sort_by == 'SCHEMA_NAME' ? '                <img class="icon" src="' . $pmaThemeImage . 's_' . $sort_order . '.png" width="11" height="9"  alt="' . ($sort_order == 'asc' ? $strAscending : $strDescending) . '" />' . "\n" : '')
       . '        </a></th>' . "\n";
    $table_columns = 3;
    foreach ($column_order as $stat_name => $stat) {
        if (array_key_exists($stat_name, $first_database)) {
            if ($stat['format'] === 'byte') {
                $table_columns += 2;
                $colspan = ' colspan="2"';
            } else {
                $table_columns++;
                $colspan = '';
            }
            $_url_params['sort_by'] = $stat_name;
            $_url_params['sort_order'] = ($sort_by == $stat_name && $sort_order == 'desc') ? 'asc' : 'desc';
            echo '    <th' . $colspan . '>'
                .'<a href="./server_databases.php' . PMA_generate_common_url($_url_params) . '">' . "\n"
                .'            ' . $stat['disp_name'] . "\n"
                .($sort_by == $stat_name ? '            <img class="icon" src="' . $pmaThemeImage . 's_' . $sort_order . '.png" width="11" height="9"  alt="' . ($sort_order == 'asc' ? $strAscending : $strDescending) . '" />' . "\n" : '')
                .'        </a></th>' . "\n";
        }
    }
Нет, ни в коем случае.

Просто оно ведь на самом деле так ;)
Давно пользуемся jTemplates.

Самое главное, на мой взгляд, преимущество таких шаблонизаторов:
HTML в одном месте.

Генерить HTML на сервере — значит смешивать логику и представление.
Черт, отправился случайно комментарий.

Дополнение:

Итого, логика такая:
— все данные хранятся в массиве объектов, который уже сформирован и передан клиенту
— при перетаскивании и дропе идет выборка данных из этого массива (по некоторым причинам не используется аякс при каждом
действии, но принцип тот же), формируется объект с необходимыми данными, и добавляется в другой массив,
с выбранными объектами
— данные из объекта подставляются в шаблон и движок jTemplates рендерит этот шаблон в DOM

Т.е. работа с данными и работа с отображением полностью отделена.

Этот подход, как выше писал donnerjack13589, полностью оправдан в случае с динамическим содержимым,
все отображение отдано клиенту, сервер генерирует только данные.
Вот, +1 к jTemplates.

Расскажу о реальном применении.

Разрабатывали мы один проект, и была одна страница с таким функционалом
(смысл — есть общий список вопросов, нужно из них создать свой список и указать для каждого свои параметры):
— пользователь мог перетягивать дивы из одной части страницы в другую
— после дропа дива должен был появиться див с достаточно сложной структурой, таблицей, вложенными дивами и т.п.
— этот див также обладал функциональностью: при нажатии на определенные ссылки у него менялась структура и т.п.

Как поступать?

Генерировать html на сервере в корне неверно, т.к. не разделяются данные и представление.

Писать что-то вроде "" + id + '<a href="'+… тоже неправильно.

Тут на помощь приходят шаблоны.

Они чем-то похожи на View из MVC.

Если ддос не критичен для сайта, переждите.

Когда-то тоже писали такие ребята нам, по одному сайту.

Мы вежливо ответили, что мол, доссьте.

Поддосили пару дней, перестали и забыли — не могут же они свой ботнет вечно расходовать на одного клиента.

Другое дело, если простой в пару дней критичен.
На самом деле должно быть так:
вот потому и заболели :)

если счас грянут морозы, болезни резко прекратятся

вирус ведь переносится на капельках жидкости,
а если станет холодно, он замерзнет и умрет :)
хабр глючит

процент конкретно по гриппу: 0,25%

что немного превышает средний показатель

никто не спорит, что эпидемия есть

но вы смотрели статистику смертности за обычные года? от автомобильных катастроф? от отравлений?
дописываю:

процент смертности 0,025%

средний процент смертности от гриппа: 0,01—0,2%

ладно, пусть конкретно грипп ~20 000

Имеем:
заболевших: ~200 000
умерших: ~50

На самом деле, это не эпидемия H1N1, и даже не эпидемия гриппа.

Это сезонная эпидемия ОРВИ, хотя, конечно, самая масштабная за последние года.

К ней примешался H1N1 и политика, оттуда и паника.

Зато потом наше правительство и другие фигуры власи смогут сказать: «Итить-колотить! Мы спасли Украину от эпидемии! Голосуйте за нас!»

Пруфлинки:
www.moz.gov.ua/ua/main/press/?docID=13950
www.moz.gov.ua/ua/main/icsm/sesinfo/?docID=13954

Information

Rating
Does not participate
Location
Украина
Registered
Activity