541
Subscribers
No data24 hours
No data7 days
-330 days
Posts Archive
Как готовить чистую архитектуру и не отравиться
Основная суть такая:
1. Выделите сущности приложения, разбейте по предметной области. Это должны быть максимально тупые DTOшки или интерфейсы. Поместите все это в пакет entity
* Сущности независимы. Абсолютно. Точно
* Сущности, в сущности, ничего не умеют
2. Поймите, что ваше приложение делает. Выделите эти действия в пакет usecase. Делить по предметным областям необязательно, так как могут существовать межпредметные юзкейсы.
* Юзкейсы зависят только от интерфейсов и других юзкейсов
* Реализуют эти интерфейсы только репозитории — абстракции над некими хранилищами
*
*
4. Выделите все, что не относится к вашему приложению напрямую (то есть то, что не entity и не usecase)
Я почти все время использовал ORM для запросов к базам данных. И совсем-совсем редко приходилось запросы этой ORM смотреть. Писать сырые запросы было очень больно и писал я с кучей ошибок.
Оказалось в Го так не принято, они пишут сырые запросы. Часто тупо строчкой... Благо есть DSL в виде jet и кодогенераторы в виде sqlc, чтобы не совсем по-ушлепски было.
Так вот, крутая статья по SQL, советую.
https://habr.com/ru/articles/305926/
Go Jet
https://github.com/go-jet/jet
Самохвальство да и только. А вообще куда-то туда я и двигаюсь. По крайней мере само получается.
https://habr.com/ru/companies/productivity_inside/articles/810047/
Время постить "новости".
1. Недавно наслаждался решением диффуров 18 часов подряд. Пока не сдал.
2. Делаю курс по Go в Ядре. Каждый PR заканчивается сообщениями вида: "Все супер, молодец", "Как всегда хорошо и ничего лишнего". Не знаю, правда ли все хорошо, но я эти домашки клепаю на пару часов. Никакого вызова, местами даже слишком просто. Язык приятный, всю жизнь бы писал.
3. Делаю Desbordante. За эту ночь запилил им отдельный репозиторий и пакет с консольной версией. Все хорошо, только прав в их репозитории недостаточно, чтобы красоту наводить. А еще они с релизом 2 версии получили +300 звезд. Теперь популярные в узких кругах. Пользователей так и нет.
4. Делаю вычи. В этот раз нужно консольное приложение сделать, которое приближением матриц будет сжимать изображение. Тут решил красоты навести: прикрутил Typer, написал нормальную спецификацию к формату, даже (почти) выложил в виде пакета. Да и просто хорошо оформил репозиторий. В целом работает, осталось самое утомляющее — алгоритмы сжатия написать и эксперимент поставить...
5. Сходил на клоунаду по "Смерти Ивана Ильича" Толстого. Мне понравилось, формат очень живой и интерактивный. Многое выглядит как импровизация, хотя на самом деле — долгие-долгие репетиции.
6. Погулял по кладбищу, где Цой и Горшок похоронены. Нашел криминального авторитета из 90ых, который первый ввез синтетические наркотики, рядом с могилой заслуженного врача, иронично.
Вот так пишет, ну как будто серьезный человек (лол), только и делает, что работает. А на самом деле... Я уже вторую неделю сплю по 12 часов и редко встаю с кровати. Но это все, потому что в жизни полоса черная. Но, надеюсь, все станет хорошо! Чего и вам желаю.
Крутой мужик. Объясняет понятно и достаточно глубоко.
https://youtu.be/cEjAH5ghWbY?si=3h9Me5WvGqwovi8L
А челюга у него вообще отпад.
Я пожалуй оставлю тут только технический или почти технический контент.
Все личное переедет в более мелкое комьюнити знакомых и друзей. Мне так будет спокойнее и комфортнее.
Надеюсь на понимание.
https://t.me/+TDqd-o7OunY3NDJi
Наклепал на коленке модуль, который бесполезные слова из текста убирает для кучи языков. Прикольный опыт. Так еще полезно, так как не было небольших решений решаюх эту задачу с нужным датасетом.
https://github.com/toadharvard/stopwords-iso/tree/main
Скатался в Ядро пофлексить на первом занятии по микросервисам на Go. Флекс успешно выполнен.
Теперь надо делать ультрапростые (на первый взгляд) домашки и можно будет на стажку пойти.
Не знаю насколько оно мне все надо, но лишним точно не будет. Тем более я уже больше года хочу язык изучить, а тут вроде задачи. Даже какие-то прикольные.
Последнюю неделю почти все свободное время тратил на написание бекенда и изучение Celery.
Последний очень большой и неповоротливый, но это не всегда минус. Довольно много можно сделать из коробки. Но из-за специфики приложения не хватало возможности аккуратно задать ограничение по памяти на выполнение задач. В итоге пришел к чему-то такому:
class ResourceIntensiveTask(Task):
# There are default Celery time limits, see: https://docs.celeryq.dev/en/stable/userguide/workers.html#time-limits
time_limit = settings.worker_hard_time_limit_in_seconds
soft_time_limit = settings.worker_soft_time_limit_in_seconds
# There are custom memory limits using `resource` module
hard_memory_limit = settings.worker_hard_memory_limit
soft_memory_limit = settings.worker_soft_memory_limit
def before_start(self, task_id, args, kwargs) -> None:
resource.setrlimit(
resource.RLIMIT_AS, (self.soft_memory_limit, self.hard_memory_limit)
)
super().before_start(task_id, args, kwargs)
А еще много разных приседаний было с базой данных из-за специфики работы пулинга в sqlalchemy и реализацией многопоточности в Celery.
Кстати, о sqlalchemy, нашел вот такую библиотеку (https://github.com/absent1706/sqlalchemy-mixins/tree/master), которая ActiveRecord реализует над ORM. Выглядит очень удобной, особенно, если приложение на 99% CRUD, а так же фильтрация. Очень сильно напоминает DjangoORM.
На самом деле много чего еще происходит, часто приходится писать на 2-3 разных языках — С, Go и Python. А еще делаем вместе с другом доклад про MapReduce и Big Data. По-своему прикольно, хотя и, если честно, нужно совсем небольшому числу компаний.Это самый искренний обзорщик всяких штук из тех, что я видел.
https://youtu.be/DtwUc3_NR_o
Кстати, именно такую клавиатуру мне подарили милашки с ПИ.
А ещё огромную мягкую кнопку ENTER. Она превосходна.
Так же превосходна как сборник армянских анекдотов и докимакура с Фрирен.
Но на самом деле самое лучшее, что мне подарили — это ощущения праздника на день рождения. Я с уверенностью могу сказать, что это лучший день рождения за мою жизнь. Всех люблю <3
