Обновить
10
Константин@fe3dback

Backend developer

3
Подписчики
Отправить сообщение

Можно пример, как вы собираетесь писать код без абстракций? Разница классов и функций только в этом по сути.

К примеру есть у вас сервис, который из абстрактного репозитория получает данные (к примеру книги)

interface Library {
  getArticles(authorID int64) []Article
}

Можно ли заменить это на сигнатуру функции, к примеру: func (authorID int64) []Article? Конечно. Но функция сама по себе не чистая, ей для работы нужен какой-то коннекшен к базе. И где его взять?

Если прокидывать коннекшен прямо в аргументы вот так:

getArticles(conn redis.Client, authorID int64) []Article
                 ^

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

В классах мы можем без проблем разделить передачу аргументов на 2 разных штуки:

  • конструкторы (скрытую явно от остального кода)

  • функции (открытую, публичную часть)

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

Nice, а можно мне тоже кусочек yandex за халяву, чем я хуже этого чела из ВТБ.

Время относительно же. Для людей в корабле, которые летят скажем с 50% скорости света, нужно условно пару часов чтобы пролететь половину галактики. Другое дело, что для всего остального во вселенной пройдет пара миллионов лет, и возможно через минуту их полета, в окне станет темно, так как погаснут некоторые звезды.

При разгоне до 99.9% скорости света, можно за 1ms оказатся сразу вконце времени и на другом конце космоса в эру после черных дыр (если конечно предположить что наш корабль не развалился каким-то образом за эти триллиарды лет полета).

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

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

Чтобы всё было ок, нужно сначала придумать искусственную гравитацию на корабле. (ну или очень быстрые перелеты, в 98% скорости света например).

Я не против рассматривать их

Такие новости дают возможность немного порофлить (коммент выше например хорош), ну и показывает дамп мнений it спецов на данный момент времени.

За обработку ошибок в rust и go обидно. Не понятно почему автор воспринимает возможные ошибки в программе, как "грязь", как будто там код подгадился:

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

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

Как исключения вам помогут? Максимум у вас код в проде упадет где-то, вы это залогируете из эксепшена, и потом в этом месте добавите логику для фикса бага. Но данные уже не вернуть.

В go/rust вы сразу знаете все места где у вас упадет код, и в зависимости от контекста и важности функции, сразу можете корректно обработать этот случай.

Не очень, в линукс можно разделить на 1, 2 или 3 виртуальных монитора (для всего софта и ос, они выглядят как реальные). Но при 3 мониторах, первый обычно широкий (21:9), а остальные 2 по бокам маленькие, на них особо ничего не сунешь. Но наверное стримить удобно будет. Если разделять на 2 монитора, то приходится голову крутить влево-вправо. + они очень широкие, 2 реальных не широких монитора намного удобнее.

Но играть на этом супер, мне нравится. В работе я делаю один виртуальный 21:9 монитор по центру, а слева-справа оставляю черные полосы.

А как нажать отмену? Вот допустим мышка сломалась, я домохозяйка по кнопкам только мышкой тыкаю. Купил новую мышь, а она не работает, кликнуть по отмене никак.

в прошлом году она обнаружила первый в истории экземпляр открыто очарованного дважды заряженного тетракварка с двумя очарованными кварками и антикварком с верхним и нижним очарованием. 

Напомнило генерацию названий предметов из дьябло, тут явно что-то очень "рарное" )

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

если условный it'шник не сможет работая в РФ и живя условно в Турции переводить себе деньги, ему придется менять работу на локальную, за пределами РФ. Соответственно в РФ будет меньше денег (налоги), меньше спецов (так как они перестанут работать) и т.п.

Это не clean architecture, а dirty s.

Бизнес модели не должны знать про gorm, а тут какие-то аннотации. Почему мы вообще полагаемся на технический слой?

Контроллеры кривые, в го же есть нормальный duck typing:

type Repository {
  GetByID(userID int64) (models.User, error)
}

type Controller {
  repo Repository
}

func NewController(repo Repository) *Controller {
  return &Controller { repo: repo }
}

func (c *Controller) GetUser(userID int64) (response, error) {
  user, err := c.repo.GetByID(userID)
  if err != nil {
    // ..
  }

  // some logic here
  return response, nil
}


И теперь мы можем в DI легко связать наш архитектурный слой с репозиторием, и бизнесовый с контроллером.

framework специфичные штуки, от echo как раз можно в архитектурном слое использовать, но не в контроллерах и бизнес домене.

Такой код с interface{}
Create(obj interface{})


обычно свидетельствует о костылях, за редкими исключениями. А тут это внезапно бизнес код.

ну т.п., тут куча всякого mess'а, не рекомендую кому-то так делать
Недавно увидел генератор vuepress.vuejs.org
Он пока в альфе, но уже функционал довольно большой, и очень удобно.

Вот тут автор VUE его показывает:
www.youtube.com/watch?v=lIv1ItUzktc
А чем csv плох? Если конечно нет требований к заранее подготовленным формулам и не нужно цветами играть.

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

Данные можно лить в csv используя генераторы (yield) и поток с блокировкой напрямую в файл.

Проблема с совместимостью обычно решается двумя кнопками «скачать для windows (cp1251, ';')» и «скачать для unix (utf8, ',')

Csv насколько я знаю идеально открывается во всех существующих экселях, опендокументах, спредшитах и в чем угодно вообще.

Информация

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

Специализация

Бэкенд разработчик
Ведущий
Golang
Linux
Базы данных
Высоконагруженные системы
Проектирование архитектуры приложений