All streams
Search
Write a publication
Pull to refresh
112
0
Дмитрий Думанский @doom369

Гребец и на дуде игрец

Send message
Добавить в смс враппер еще один метод.
Так смс это не расширение, а новое поведение, поэтому все честно.
И как код выше противоречит этому принципу?
Т.е. Вы сами создаете инстансы классов и передаете синглетоны?


Да. Вот пример. В нем как раз есть и имейл сендер и смс сендер и пуш сендер =).

А если завтра надо будет использовать SmsSender вместо EmailSender


Любая IDE это делает через 2 клика.
Конструкторы лучше. Так как легче тестить. Например, когда нужно замокать этот самый EmailSender. Но да, бывает, что конструктор очень сильно ростет. Я в таких случаях создаю объект Holder который содержит ссылки на все синглтоны.
т.е. разобраться с одним спрингом сложнее, чем с полусотней других «простых» решений?


Именно. Тут уже внизу писали, что спринг — в топах вопросов на СО.

а набор «простых» решений еще придется друг к другу подгонять и писать интеграцию.


Наоборот — в виду узкой специализации каждой из библиотек вместе их собрать гораздо легче, чем наконфигурить спринг. Гляньте, например, guice как пример DI. За 1 минуту подключаете и используете во всю.

P. S. Если что — я 7 лет использовал спринг. Последние 3 год не использую. Моя продуктивность сильно выросла. Но это мой частный случай.
Спринг многоцелевой и сложный. Чтобы начать работу со спрингом нужен определенный бекграунд. Любую задачу, которую решает спринг можно решить другими инструментами, которые простые и узконацеленные. Никто не говорит что нужно писать свои велосипеды.
Все это точно так же легко решается и без спринга.
Так без спринга получается меньше. Но да, минимальную инфраструктуру вокруг нужно будет набросать.
Ну так в том то и дело. Если нет разницы — так зачем платить больше (использовать спринг?)
Эти 6 строк заворачиваете в обертку и все. Переиспользуете везде. Зато любой джун разберется за 1 минуту и не будет думать как же работает вся эта магия.
Упрощенно:
try {
     dbConnection = getDBConnection();
     dbConnection.setAutoCommit(false);
     new JOOQ(dbConnection).query().execute(); //dbConnection.commit();
} catch (Exception e) {
    dbConnection.rollback();
}

В свое время отказался от Hazelcast так как:

1. При старте хацелькаст отжирал около 50 МБ хипа; А мы ранимся на low-end VM, где всего есть 250мб;
2. Внутри, на то время, был сложный и не очень хороший код со слипами в местах записи (если мне не изменяет память)…
3. Довольно большая джарка, сейчас уже 5мб, смотреть пункт 1.
Это был просто пример готового инструмента, который решает задачу, без необходимости реализовывать протокол самому.
Ну если далеко не ходить, то — https://habrahabr.ru/post/276951/
Ну так задача специфичная. Вам никто не мешает переопределить HttpObjectDecoder и убрать от туда парсинг хидеров, вопрос нескольких часов.
Дырок в функциональности Go нет.


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

уместно будет процитировать эту шутку


Ну Вы же понимаете, что дело не в языке, а в людях, которые пишут код.
Спору нет – erlang для этого, очевидно, хорош. Не зря WhatsApp рекорды по соединениям на одном сервере с ним ставил =)


Ну он не так уж и хорош, если углубится в детали. Во-первых, им для этого пришлось допиливать виртуалку ерланга, так как у ерланга были проблемы с большими нагрузками.
Во-вторых, если посчитать нагрузку на ядро, то у них она всего лишь 9к рек-сек. Учитывая что это чат, это явно результаты ниже среднего.
Вы меня раскусили :)
Ну как же, Вы бросили усилия на написание высокопроизводительных вебсокетов в го, которые уже давно есть на других языках и платформах. При этом добавили сверху енджинкс, добавив оверхед, чтобы закрыть дырки по фукнционалу в го.

Ну по крайней, мере это что я вижу. Из описаного выше.

Information

Rating
Does not participate
Location
Киев, Киевская обл., Украина
Registered
Activity