Как стать автором
Обновить
75
0
Долганов Евгений @edolganov

Пользователь

Отправить сообщение
Зависит. Можно подкрадываться и съедать конкурентов делением. Можно кидать приманки, можно растить зеленые растения, чтобы они делились и разрывали бОльшего конкурента на части…
Шахматы прям :)
Реально страшно за что?
Ну да, бывают баги в любом коде, в любых либах. Мы ж на этом не самолеты запускаем с реакторами, а лишь в интернете чатики, да картинки показываем.
Вы можете экспортнуть их в свой github аккаунт.
Там даже на странице проекта уже есть кнопка «Export to GitHub»
Может.
Я же больше склоняюсь, что идея сама по себе не нужна публике.
Мы нынче очень перегружены различными публичными сервисами.
Поэтому не все новые идеи встречают отклик в избалованных сердцах и перегруженных мозгах людей :)
Привет коллегам по идее!
Год назад сам запустил такую штуку: http://freecom.me/

У меня не взлетело, но вам искренне желаю удачи!
Впечатление от кода: его трудно читать и он многословен.
Примеры:
listViewModelDef.superclass.constructor.call(this, title);

ko.bindingHandlers.bufferedListPager.init(element, valueAccessor, allBindingsAccessor, viewModel);

testListDef.superclass.constructor.call(this, 'Тестовый список');



Убежден, что причина именно такого кода — педантичность автора.
Не навязываю, но как совет: будет лучше, если всю эту «ненужную» мишуру спрятать как-то в недра. Ведь чем меньше видишь кода, тем проще его понимать. А спрятать всегда можно — было бы желание :)

Попытаюсь сказать по-другому:
«проблема с cohesion» — это обычно не такая критичная проблема, чтобы решать ее на каждом проекте. Да, вас может раздражать что один класс содержит 2 тысячи строк кода и лучше бы этот код разбить на отдельные классы.

Но проекты с такими God Сlass-ами вполне нормально живут, для них пишутся такие же юнит-тесты как и для меньших классов.

Потому что мы все равно разнесли логику на слои. Контроллеры получают запросы, DAO общаются с БД, а God Сlass-ы бизнес-логики содержат все сценарии работы, которые нужны от системы.

Я не говорю что God Сlass-ы — это хорошо. Я говорю, что они терпимы и с ними можно жить.
Про юнит-тесты не соглашусь. Если мы раскидываем код из God Сlass-а в кучу разных других классов — то мы наводим некий порядок, но не уменьшаем сложность всей системы.

Юнит тесты для класса с 30 методами — это условно 30 разных тестов для каждого отдельного метода.

Юниты тест для разделенных 6 разных классов с 5 методами в каждом — это те же 30 тестов.

Т.о. как у вас было 30 тестов, так и придется поддерживать те же 30 тестов.
Однако, опыт показывает, что в 90% случаев проще использовать простой подход: один-два-много God Сlass-ов с кучей публичных методов в каждом из них.

Да будет немного муторно, когда методов 20-30.
Но это нормальная цена за простоту — любой джуниор сразу понимает, как это работает.:)

Я не призываю использовать только такой подход, нет!
Мысль моя в том, что обычно этого достаточно. А когда проект станет большим, то тогда отдельные участки проекта можно поменять на что-то другое.
Предложу еще одно решение поставленной в задаче проблемы:
Итак у нас есть сервис, в котором куча «методов-скриптов».
Если количество этих методов уже неудобно, то можно выносить их в отдельные классы-команды.

Пример
class CreateApplication extends BaseCommand<Application, Result>{

    public Application app;
    public InvocationContext context;

    public CreateApplication(Application app){
         this.app = app;
    }

    public Result invoke(){
          //здесь делаем логику создания в возвращаем результат
          //используем context
    }

}


Тогда у сервиса будет универсальный метод invoke:
   
   public <T> invoke(BaseCommand<?, T> command){
       command.context = ...; //проставляем контекст выполнения
       return command.invoke();
   }



Как видите, здесь мы создаем команду где-то извне, передаем ее сервису, сервис проставляет свой контекст исполнения (например контекст может содержать классы DAO) и дальше вызывает команду на исполнение.

У такого подхода есть свои плюсы, минусы и вариации.
Но в целом он тоже применим.

Как пример реализации такого подхода, я даже когда-то написал свою библиотеку для Java.
JBOSS 4 — эх, молодость! джуниорство босоногое)
Я лишь хотел напомнить про подход как таковой.

Если нужна оптимистическая блокировка в ситуации INSERT-а строки вместо UPDATE существующей, то можно использовать внешнюю таблицу для лока:

«Добавить новую строку баланса, проставив новую ревизию в глобальную таблицу ревизий, если ожидаемая старая ревизия такая-то»

Надеюсь идея понятна.
Помимо предложенного метода в статье предложу более общий вариант — оптимистическая блокировка:

UPDATE users SET balance = ${newValue} WHERE balance=${expectedOldValue};

Данный запрос вернет 0, если ожидаемый баланс не совпадет с текущим — т.е. кто-то нас опередил и наши данные о балансе больше не актуальны.
Рекомендую всем желающим хороший пример реализации Connection Pool от MyBatis.

Довольно понятный код и учитываются все аспекты данного вопроса:
— ограничение сверху на макс.количество соединений
— обработка ошибок соединения
— обновление пула соединений новыми, при обрыве старых

Я даже брал когда-то этот код для реализации пула сокетов.
Дорогой Автор! Вы — два раза большой молодец!

Первый раз потому, что проделали такую большую работу и довели ее до логического конца (релиза). А второй раз — Вы написали большую статью на Хабр и не повелись на типичные провокации в духе «да нафига это нужно?».

Будьте уверены — это нужно. Не согласны обычно те, кто сам ничего такого не создает ;)
Спасибо.
Спасибо вам за внимательность! Поправил.
Я хотел показать данной статьей, что не нужно ограничивать себя рамками больших типовых решений.
Для небольших веб-проектов может оказаться приятней и быстрей написать что-то своё.
Ответ на вопрос «зачем» дан в самом начале статьи — посмотрите внимательнее :)

Плюс всегда приятно опуститься на уровень «пониже», чтобы самому познать то, что скрыто от вас в Больших Фреймворках.

Формально вы конечно правы!
Но на практике это скорее простой и удобный стандарт Java веб-приложений. Например Томкат нельзя считать полноценным JEE-сервером — всё что в нем есть — это как раз-таки одни сервлеты :)
Ну вот!
А я с товарищем 5 лет назад делал что-то похожее в университете.
Приятно, что мы двигались в том же направлении, что и авторы из Фейсбука.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность