170 похожих чатов

В шаблоне от тишки бизнес логика с бд находится в

отдельном пакете services
https://github.com/Tishka17/tgbot_template/blob/master/src/tgbot/services/repository.py

но почему бы не выносить бизнес логику в методы модели? условно
class User(Base):
tablename = 'users'

id = Column(Integer, pk=True)

@classmethod
async def select_user(cls, user_id: int) -> 'User':
query = select(User).where(User.id == user_id)
return await session.execute(query)

7 ответов

4 просмотра

С течением времени ты заметишь что не вся логика относится к конкретной модели. Так появилась идея о сервисах - сущности куда можно вынести бизнеслогику которая не относится к конкретной модели. При этом у тебя появилась проблема - бизнеслогика размазана по двум разным слоям. На самом деле на практике все ещё хуже - на моем текущем проекте разрабы слышали про сервисы, но дальше видимо не продвинулись и в результате логика размазана по моделям, контроллерам, сервисам, сигналам, таскам селери, сериалайзерам дрф и хуй знает чему ещё.

ZeN- Автор вопроса
Alex
С течением времени ты заметишь что не вся логика о...

кстати насчет конкретности модели не подумал, и вправду

Alex
С течением времени ты заметишь что не вся логика о...

Поэтому дальнейшем решением является сосредоточение логики в слое сервисов.

Если ты работаешь с бд через клиент напрямую, то оборачиваешь работу с таблицей в Адаптер и там пишешь методы уровня взаимодействия с этой таблицей. Есть ещё Transaction script примерно то же самое, но не для таблицы, а для сложных межтабличных сценариев. В джанге комплексные запросы для переиспользования размещают в кастомных queryset. А вот про алхимию не скажу

ZeN- Автор вопроса

что-то не так?

Alex
что-то не так?

Надо вникать, а мне лень

Похожие вопросы

Обсуждают сегодня

А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
а как ловят такое ghci> res <- getPos2 urlt 0 (alist !! 0) 200 ghci> res SearchAtom (Search "www.google.com" "/search?q=" "Haskell") "haskell.org" (SearchTS [(2024-05-06 07:...
Fedor
14
Ребята, а из API геокодеров (по адресам в РФ) что сейчас актуального и есть ли среди актуального бесплатное/с нормаотным лимитом запросов? ситуация простая - на сайте периоди...
Dreamer_0x01 VeseloV
8
Добрый день, а есть ли возможность завернуть уже зашифрованный пасс в креденшл, в интернете натыкаюсь только на создание пары и ее шифровки, но тогда все равно нужно расшифров...
SSS
1
короче сгенерила мне эта штука код на ассемблере: struc string val { common local .value dq .value .value: if ~val eq db val end if db 0 } fo...
Vi Chapmann Chapmann
12
Всем привет! Массив вводится с клавиатуры, кол-во элементов неизвестно, поэтому я указал arr db 100 dup(?) С нахождением максимума проблем нет, а вот минимум почему-то всегд...
En Vind Av Sorg
11
Есть тут те у кого дети есть + 2 работы + в зал ходят + в семейной жизни все хорошо?
Abdul-Aziz M.
13
Карта сайта