Ninja Learn | نینجا لرن
1.26K subscribers
96 photos
36 videos
11 files
307 links
یادگیری برنامه نویسی به سبک نینجا 🥷
اینجا چیزایی یاد میگیری که فقط نینجاهای وب‌ بلدن 🤫

📄 Send me post: https://t.iss.one/NoronChat_bot?start=sec-fdggghgebe

👥 ɢʀᴏᴜᴘ: https://t.iss.one/+td1EcO_YfSphNTlk
Download Telegram
فقط برنامه نویسا درکش میکنن :)

https://youtu.be/EFmxPMdBqmU?si=dkT-Ry9K_-5m8DxY

#️⃣ #video


🥷 CHANNEL | GROUP
👍6
خب خب خب Design Patterns 🏗

امروز می‌خوایم درباره‌ی Design Patterns یا الگوهای طراحی تو برنامه‌نویسی صحبت کنیم. این موضوع خیلی مهمه و توی دنیای نرم‌افزار به شما کمک می‌کنه که کدهاتون رو بهتر، تمیزتر و قابل‌نگهداری‌تر بنویسین. توی این پست تعریف می‌کنیم که این الگوها چی هستن، چه انواعی دارن و ...

🧠 ‏Design Patterns چیه؟

Design Patterns یا الگوهای طراحی، راه‌حل‌های استاندارد و امتحان‌شده‌ای هستن برای مشکلات رایجی که تو طراحی نرم‌افزار بهشون برمی‌خوریم. این الگوها مثل یه نقشه‌ی راهن که به شما نشون می‌دن چطور یه مسئله‌ی خاص رو به بهترین شکل ممکن حل کنین. این مفهوم اولین بار تو کتاب معروف Gang of Four یا GoF
معرفی شد. این کتاب سال ۱۹۹۴ منتشر شد و هنوزم یه منبع معتبر و مرجع به حساب میاد.

این الگوها از یک زبون‌ خاص مستقل هستن، یعنی می‌تونین تو هر زبانی مثل پایتون، جاوا یا سی++ ازشون استفاده کنین. ما اینجا با پایتون مثال می‌زنیم تا ساده و قابل‌فهم باشه.

📚 انواع Design Patterns
طبق دسته‌بندی Gang of Four، الگوهای طراحی به سه دسته‌ی اصلی تقسیم می‌شن:

1⃣Creational Patterns (الگوهای ساختاری):
این الگوها با نحوه‌ی ساختن اشیاء (Objects) سر و کار دارن و به شما کمک می‌کنن که اشیاء رو به روش‌های انعطاف‌پذیر و بهینه بسازین.

2⃣Structural Patterns (الگوهای ساختاری):
این الگوها درباره‌ی سازمان‌دهی و ارتباط بین کلاس‌ها و اشیاء هستن تا ساختار کِدتون منظم‌تر بشه.

3⃣Behavioral Patterns (الگوهای رفتاری):
این الگوها روی تعاملات و مسئولیت‌های بین اشیاء تمرکز دارن و باعث می‌شن ارتباط بین بخش‌های مختلف برنامه‌تون بهتر بشه.

حالا بریم سراغ یه مثال پایتونی از هر دسته تا دقیق ببینین چطور کار می‌کنن.

1️⃣ ‏Creational Pattern: Singleton (تک‌تون)

الگوی Singleton مطمئن می‌شه که از یه کلاس فقط یه نمونه (Instance) ساخته بشه و همه‌جای برنامه به همون یه نمونه دسترسی داشته باشن.

مثال:
فرض کنین می‌خواین یه سیستم لاگ داشته باشین که فقط یه شیء ازش وجود داشته باشه:
class SingletonLogger:
# متغیر استاتیک برای ذخیره‌ی نمونه
_instance = None

# بازنویسی متد __new__ برای کنترل ساخت نمونه
def __new__(cls):
if cls._instance is None:
cls._instance = super().__new__(cls)
return cls._instance

def log(self, message):
print(f"Log: {message}")

# تست کردن
logger1 = SingletonLogger()
logger2 = SingletonLogger()

# چک می‌کنیم که آیا هر دو متغیر به یه شیء اشاره می‌کنن
print(logger1 is logger2) # خروجی: True
logger1.log("سلام دنیا") # خروجی: Log: سلام دنیا
logger2.log("تست دوم") # خروجی: Log: تست دوم

توی متد new چک می‌کنیم که آیا _instance قبلاً ساخته شده یا نه. اگه نشده باشه، یه نمونه جدید می‌سازیم.

چون logger1 و logger2 به یه شیء اشاره می‌کنن، هر تغییری که با یکی بدین، روی اون یکی هم اعمال می‌شه.

خروجی True نشون می‌ده که فقط یه نمونه از SingletonLogger وجود داره.


2️⃣Structural Pattern: Adapter (آداپتور)
الگوی Adapter مثل یه پل عمل می‌کنه که دو کلاس با رابط‌های (Interface) متفاوت رو به هم وصل می‌کنه.

مثال:
فرض کنین یه کلاس قدیمی به اسم OldPrinter دارین که متد print_text داره، ولی سیستم جدیدتون از متد print پشتیبانی می‌کنه:
# کلاس قدیمی
class OldPrinter:
def print_text(self, text):
print(f"Old Printer: {text}")

# آداپتور
class PrinterAdapter:
def __init__(self, old_printer):
self.old_printer = old_printer

def print(self, text):
self.old_printer.print_text(text)

# تست کردن
old_printer = OldPrinter()
adapter = PrinterAdapter(old_printer)

adapter.print("سلام از سیستم جدید") # خروجی: Old Printer: سلام از سیستم جدید

کلاس OldPrinter یه متد قدیمی داره به اسم print_text.
کلاس PrinterAdapter یه نمونه از OldPrinter رو می‌گیره و متد print رو به print_text وصل می‌کنه.
حالا سیستم جدیدتون می‌تونه با adapter.print() کار کنه، بدون اینکه OldPrinter رو تغییر بدین.

3️⃣Behavioral Pattern: Observer (ناظر)
الگوی Observer یه رابطه‌ی یک‌به‌چند بین اشیاء تعریف می‌کنه. یه شیء اصلی (Subject) وقتی وضعیتش تغییر می‌کنه، به‌طور خودکار به همه‌ی ناظرها (Observers) خبر میده

مثال:
فرض کنین یه سیستم اعلان دارین که وقتی پیام جدید میاد، همه‌ی کاربرها باخبر بشن:

ادامه, پست بعد
8👍2
class Subject:
def __init__(self):
self._observers = [] # لیست ناظرها

def attach(self, observer):
self._observers.append(observer)

def notify(self, message):
for observer in self._observers:
observer.update(message)

class Observer:
def __init__(self, name):
self.name = name

def update(self, message):
print(f"{self.name} received: {message}")

# تست کردن
subject = Subject()
observer1 = Observer("کاربر ۱")
observer2 = Observer("کاربر ۲")

subject.attach(observer1)
subject.attach(observer2)
subject.notify("پیام جدید اومد!")

Subject لیستی از ناظرها رو نگه می‌داره و با attach می‌تونین ناظر جدید اضافه کنین.
وقتی notify صدا زده می‌شه، متد update همه‌ی ناظرها اجرا می‌شه و پیام رو دریافت می‌کنن.
این الگو باعث می‌شه ارتباط بین اشیاء پویا و منعطف باشه.

🔍 چرا Design Patterns مهم هستن؟
کد تمیزتر:
با استفاده از الگوها، کدتون ساختارمند و قابل‌فهم‌تر می‌شه.

نگهداری آسون‌تر:
چون از راه‌حل‌های استاندارد استفاده می‌کنین، بعداً تغییر دادن یا گسترش کد راحت‌تره.

ارتباط بهتر:
برنامه‌نویس‌ها با اسم الگوها می‌تونن سریع منظور همدیگه رو بفهمن.

بهینه‌سازی زمان:
به جای اختراع دوباره‌ی چرخ، از راه‌حل‌های تست‌شده استفاده می‌کنین.


جمع‌بندی
Design Patterns مثل یه جعبه‌ابزار برای برنامه‌نویس‌ها هستن. این الگوها فقط یه بخش کوچیک از دنیای بزرگ Design Patterns هستن و تو کتاب Gang of Four، ۲۳ الگوی مختلف معرفی شده که هر کدوم کاربرد خاص خودشون رو دارن.

#️⃣ #programming #software


🥷 CHANNEL | GROUP
7
پست بعدی go باشه؟
👎22👍171
دوستان توی X (توئیتر سابق) اکانت باز کردم و احتمالا اونجاهم پست بزارم
دوست داشتید میتونید فالو داشته باشید که اگه پست گذاشتم استفاده کنید.

لینک اکانت:👇
https://x.com/mohammad_stdout?t=cU6VCDqEQhyU2SO5AtqkGw&s=09

#️⃣ #link


🥷 CHANNEL | GROUP
👍9👎2
خب خب خب WebSocket در Fastapi 🌀

امروز می‌خوام درباره‌ی یه موضوع باحال و کاربردی تو دنیای وب حرف بزنم: پیاده‌سازی WebSocket در FastAPI اگه دنبال ساخت اپلیکیشن‌های realtime مثل چت، داشبوردهای زنده یا بازی‌های آنلاین هستین، این پست براتون خیلی مفیده. پس با من همراه باشین تا با هم یاد بگیریم WebSocket چیه و چطور می‌تونیم تو FastAPI ازش استفاده کنیم.

🧠 WebSocket چیه و چرا مهمه؟
‏ WebSocket یه پروتکل ارتباطیه که به کلاینت (مثل مرورگر) و سرور اجازه می‌ده یه ارتباط دوطرفه و همیشگی داشته باشن. برعکس HTTP که فقط یه درخواست می‌فرستی و یه پاسخ می‌گیری، WebSocket این امکان رو می‌ده که هر دو طرف هر وقت خواستن پیام بفرستن و بگیرن، بدون اینکه نیاز باشه کلاینت مدام درخواست بفرسته. این برای اپلیکیشن‌هایی که نیاز به آپدیت‌های زنده دارن، مثل چت روم‌ها، اعلان‌های realtime یا بازی‌های آنلاین، عالیه

🚀 FastAPI و WebSocket

FastAPI یه فریم‌ورک وب مدرن و سریع برای پایتونه. یکی از قابلیت‌های باحالش هم پشتیبانی از WebSocketه. FastAPI از Starlette استفاده می‌کنه (یه فریم‌ورک ASGI سبک و قدرتمند)، و همین باعث می‌شه بتونیم به راحتی WebSocket رو پیاده‌سازی کنیم.

🛠 چطوری WebSocket رو تو FastAPI پیاده‌سازی کنیم؟

برای شروع، باید از کلاس WebSocket تو FastAPI استفاده کنیم. بیاین با یه مثال ساده شروع کنیم:
from fastapi import FastAPI, WebSocket

app = FastAPI()

@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
while True:
data = await websocket.receive_text()
await websocket.send_text(f"پیامت این بود: {data}")

تو این کد:
یه endpoint به اسم /ws ساختیم.

وقتی کلاینت بهش وصل می‌شه، سرور با accept() ارتباط رو قبول می‌کنه.

بعدش تو یه حلقه پیام‌های کلاینت رو می‌گیره و همونو برمی‌گردونه.


به این می‌گن یه Echo Server ساده هر چی کلاینت بفرسته، سرور عینشو برمی‌گردونه.

📡 یه مثال پیشرفته‌تر: چت روم با WebSocket

حالا بیاین یه چیز باحال‌تر بسازیم، مثلاً یه چت روم که چندتا کلاینت بتونن بهش وصل بشن و پیام‌هاشون رو به هم بفرستن. برای این کار، باید اتصال‌های فعال رو مدیریت کنیم. یه کلاس به اسم ConnectionManager می‌سازیم که لیست اتصال‌ها رو نگه داره و بتونیم بهشون پیام بفرستیم یا به همه broadcast کنیم.
from fastapi import FastAPI, WebSocket
from typing import List

app = FastAPI()

class ConnectionManager:
def __init__(self):
self.active_connections: List[WebSocket] = []

async def connect(self, websocket: WebSocket):
await websocket.accept()
self.active_connections.append(websocket)

def disconnect(self, websocket: WebSocket):
self.active_connections.remove(websocket)

async def send_personal_message(self, message: str, websocket: WebSocket):
await websocket.send_text(message)

async def broadcast(self, message: str):
for connection in self.active_connections:
await connection.send_text(message)

manager = ConnectionManager()

@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
await manager.connect(websocket)
try:
while True:
data = await websocket.receive_text()
await manager.send_personal_message(f"تو نوشتی: {data}", websocket)
await manager.broadcast(f"یکی گفت: {data}")
except Exception as e:
print(f"خطا: {e}")
finally:
manager.disconnect(websocket)

اینجا چی داریم؟
‏ConnectionManager یه کلاسه که اتصال‌های فعال رو تو یه لیست نگه می‌داره.
وقتی کلاینت وصل می‌شه، به لیست اضافه می‌شه (connect) و وقتی قطع می‌شه، حذف می‌شه (disconnect).

‏send_personal_message به یه کلاینت خاص پیام می‌فرسته.

‏broadcast به همه کلاینت‌های وصل‌شده پیام رو می‌فرسته.

تو endpoint، پیام کلاینت رو می‌گیریم، به خودش یه جواب شخصی می‌دیم و به بقیه هم broadcast می‌کنیم.

جمع‌بندی

‏WebSocket تو FastAPI به شما این امکان رو می‌ده که اپلیکیشن‌های realtime و جذاب بسازین. از چت روم‌ها گرفته تا داشبوردهای زنده و بازی‌های آنلاین.

خب اینم از این امید وارم مفید بوده باشه :]

#️⃣  #fastapi #backend #python


🥷 CHANNEL | GROUP
👍11👌53🔥2👏1🤩1
This media is not supported in your browser
VIEW IN TELEGRAM
⚙️کاربرهای سیستم عامل های مختلف:

تجربه ی کار با سیستم عامل های دیگه مثل BSD رو داشتین؟🤔

#️⃣ #linux #bsd #meme


🐧 CHANNEL | GROUP
🤣8
دوستان کدوم پلتفرم ها رو برای گذاشتن مقاله پیشنهاد میدید؟
👍7
Ninja Learn | نینجا لرن
دوستان کدوم پلتفرم ها رو برای گذاشتن مقاله پیشنهاد میدید؟
احتمالا مقاله هم بزارم
بیشتر راجب تکنولوژی های بروزه که محتوای زیادی براشون نیست.
👍7👎1
شاید باورتون نشه ولی ایشون سگاروعه


🥷 CHANNEL | GROUP
21💔1
خب خب خب آشنایی با Windows Subsystem for Linux (WSL) 🐧

امروز می‌خوایم درباره‌ی یه ابزار کاربردی تو ویندوز حرف بزنیم: Windows Subsystem for Linux یا به اختصار WSL. اگه تا حالا باهاش کار نکردین، حتماً این پست رو بخونین، چون قراره کلی چیزای جدید یاد بگیرین


🧠 WSL چیه؟

Windows Subsystem for Linux (WSL)‏ یه ویژگی تو ویندوز ۱۰ و ۱۱ هست که به شما اجازه می‌ده یه محیط لینوکس رو مستقیماً روی ویندوز اجرا کنین. یعنی می‌تونین دستورات لینوکس رو اجرا کنین، فایل‌های لینوکس رو مدیریت کنین و حتی برنامه‌های لینوکسی رو اجرا کنین، همه اینا بدون اینکه نیاز به ماشین مجازی یا دوال بوت داشته باشین. این ابزار برای توسعه‌دهنده‌ها، به خصوص کسایی که با پروژه‌های open source کار می‌کنن، خیلی مفیده چون منابع کمتری نسبت به یه ماشین مجازی کامل مصرف می‌کنه و کار باهاش خیلی راحت‌تره.

📚 نسخه‌های WSL

‏WSL دو نسخه داره که هر کدوم ویژگی‌های خاص خودشون رو دارن:

1️⃣WSL 1:
این نسخه سال ۲۰۱۶ معرفی شد و یه لایه‌ی سازگاری بود که از کرنل ویندوز برای اجرای برنامه‌های لینوکسی استفاده می‌کرد. ولی چون از کرنل لینوکس واقعی استفاده نمی‌کرد، بعضی وقت‌ها محدودیت‌هایی داشت.

2️⃣‏ WSL 2:

این نسخه سال ۲۰۱۹ اومد و یه کرنل لینوکس واقعی رو تو یه ماشین مجازی سبک اجرا می‌کنه. به همین خاطر، عملکرد و سازگاری بهتری داره، به خصوص تو عملیات سنگین مثل کار با فایل‌ها.

‏WSL 2‏ از تکنولوژی Hyper-V (یه سیستم مجازی‌سازی تو ویندوز) استفاده می‌کنه و به همین دلیل توصیه می‌شه ازش استفاده کنین، چون امکانات بیشتری داره و سریع‌تره.


🚀 نصب WSL
نصب WSL خیلی سادست و بسته به نسخه‌ی ویندوزتون فرق می‌کنه:

تو ویندوز ۱۱:
‏WSL به صورت پیش‌فرض نصب شده، ولی باید یه توزیع لینوکس (مثل Ubuntu یا Debian) رو از Microsoft Store دانلود و نصب کنین.

تو ویندوز ۱۰:
باید WSL رو دستی نصب کنین. برای این کار، PowerShell رو با دسترسی Administrator باز کنین و دستور زیر رو اجرا کنین:

wsl --install


این دستور WSL رو همراه با یه توزیع پیش‌فرض (معمولاً Ubuntu) نصب می‌کنه. اگه می‌خواین توزیع دیگه‌ای نصب کنین، از این دستور استفاده کنین:

wsl --install -d <Distribution Name>


مثلاً برای نصب Debian:

wsl --install -d Debian


‏WSL‏ از توزیع‌های مختلفی مثل Ubuntu، Debian، Kali و Fedora پشتیبانی می‌کنه که می‌تونین هر کدوم رو که دوست دارین انتخاب کنین.


🛠 استفاده از WSL

با WSL، می‌تونین یه محیط توسعه‌ی کامل لینوکس رو تو ویندوز داشته باشین. چند تا مثال از کارایی که می‌تونین بکنین:

دستورات لینوکس:
از دستوراتی مثل ls (البته تو لینوکس dir نیست، اینجا منظورم ls-مانندها بود)، grep، awk و غیره استفاده کنین.

ویرایشگرهای متنی:
می‌تونین از Vim، Emacs یا حتی VS Code با افزونه‌ی WSL کار کنین.
ابزارهای توسعه: Git، Docker، Node.js و خیلی چیزای دیگه رو نصب و استفاده کنین.

سرورهای وب:
می‌تونین سرورهایی مثل Apache یا Nginx رو تو WSL اجرا کنین و با مرورگر ویندوز بهشون دسترسی داشته باشین.


📂 دسترسی به فایل‌ها

یکی از ویژگی‌های جذاب WSL اینه که می‌تونین بین ویندوز و لینوکس فایل‌هاتون رو به اشتراک بذارین:

از WSL به ویندوز:
فایل‌های ویندوز تو مسیر /mnt/c (یا /mnt/d برای درایوهای دیگه) قابل دسترسی هستن.

از ویندوز به WSL:
فایل‌های لینوکس رو می‌تونین تو File Explorer ویندوز از مسیر \\wsl$\<Distribution Name> ببینین.

برای عملکرد بهتر، پیشنهاد می‌شه فایل‌های پروژه‌تون رو تو فایل‌سیستم لینوکس (نه درایو ویندوز) نگه دارین، به خصوص اگه از WSL 2 استفاده می‌کنین.


🔍 نکات و ترفندها
عملکرد بهتر با WSL 2:
WSL 2 به خاطر استفاده از کرنل واقعی لینوکس و Hyper-V، تو عملیات سنگین مثل کار با فایل‌ها خیلی بهتر عمل می‌کنه.

مدیریت توزیع‌ها:
می‌تونین چند تا توزیع لینوکس نصب کنین و با دستور
 wsl -d <Distribution Name>

بینشون جابه‌جا بشین.

به‌روزرسانی WSL:
برای آپدیت کردن WSL، از این دستور استفاده کنین:
wsl --update

دسترسی به GPU:
WSL 2 از GPU پشتیبانی می‌کنه که برای کارهای ماشین لرنینگ یا گرافیکی عالیه.

محدودیت‌ها:
‏WSL از systemd پشتیبانی نمی‌کنه، که ممکنه برای بعضی سرویس‌ها مشکل‌ساز باشه، ولی راه‌حل‌های غیررسمی برای این موضوع وجود داره.


✍️ جمع‌بندی
Windows Subsystem for Linux (WSL) یه ابزار فوق‌العاده‌ست که به شما اجازه می‌ده ویندوز و لینوکس رو با هم داشته باشین. چه توسعه‌دهنده باشین، چه فقط بخواین لینوکس رو امتحان کنین، WSL یه راه سریع و ساده برای این کاره.

#️⃣ #porgramming #wsl #linux #windows


🥷 CHANNEL | GROUP
👍102❤‍🔥1👌1
خب خب خب
اولین مقاله من که توی سایت medium پابلیش شد
(نسخه فارسیشم احتمالا یا تو خود مدیوم یا توی ویرگول میزارم)

خیلی خلاصه بخوام بگم
یه بست پرکتیسه برای ساختار فایل بندی پروژتون


امید وارم مفید واقع بشه 😊

(اگه مشکلی دیدید یا پیشنهادی داشتید میتونید توی کامنتای خود مقاله بهم بگید)

🔗 لینک مقاله
و از این لینک هم میتونید مطالعه کنید

#️⃣ #refrence


🥷 CHANNEL | GROUP
🤩14🔥74👏3❤‍🔥1👍1👌1
Ninja Learn | نینجا لرن pinned «خب خب خب اولین مقاله من که توی سایت medium پابلیش شد (نسخه فارسیشم احتمالا یا تو خود مدیوم یا توی ویرگول میزارم) خیلی خلاصه بخوام بگم یه بست پرکتیسه برای ساختار فایل بندی پروژتون امید وارم مفید واقع بشه 😊 (اگه مشکلی دیدید یا پیشنهادی داشتید میتونید توی…»
This media is not supported in your browser
VIEW IN TELEGRAM
😂😂


🥷 CHANNEL | GROUP
💔12🤣4👍1👎1
خب سلام دوستان 👋

هرکسی که میخواد توی پروژه های اوپن سورس Diramid (تیم توسعه نرم افزار های اوپن سورس) شرکت کنه

میتونه عضو این گروه بشه

https://t.iss.one/+WpLLMkght6w1ZDU0

برای هر پروژه یک تاپیک زده شده.
و توجه داشته باشید این گروه جای چت و گپ زدن نیست.
قبل از عضو شدن اگر مطمئن هستید که میخواید کمک کنید عضو بشید.

با تشکر از همه ی شما عزیزان ❤️


🥷 CHANNEL | GROUP
👍7
خب خب خب ORM چیه ؟ 🛸

امروز می‌خوام درباره‌ی یه موضوع مهم و کاربردی تو دنیای برنامه‌نویسی حرف بزنم: ORM یا همون Object-Relational Mapping.

🧠 ORM یعنی چی؟

ORM (Object-Relational Mapping) یه تکنیک تو برنامه‌نویسیه که داده‌های دیتابیس رو به شکل اشیاء (objects) تو زبون‌های شی‌گرا مثل پایتون، جاوا یا سی‌شارپ مدیریت می‌کنه. به بیان ساده، ORM یه پل ارتباطی بین دنیای شی‌گرایی (کلاس‌ها و اشیاء) و دنیای دیتابیس‌های رابطه‌ای (جداول و ستون‌ها) می‌سازه. با ORM دیگه لازم نیست مستقیم با کوئری‌های SQL کار کنی؛ در عوض، با همون زبون برنامه‌نویسی‌ات دیتابیس رو کنترل می‌کنی.

مثلاً به جای اینکه بنویسی:
SELECT * FROM users

می‌تونی تو پایتون با Django ORM اینجوری بنویسی:
users = User.objects.all()

و همون نتیجه رو بگیری

📚 ORM چطوری کار می‌کنه؟
فرض کن تو دیتابیست یه جدول به اسم users داری که ستون‌هاش اینان:
id، name و email

تو برنامه‌ات یه کلاس به اسم User می‌سازی که پراپرتی‌هایی مثل id، name و email داره. ORM این کلاس رو به جدول users توی دیتابیس مپ (map) می‌کنه. یعنی هر شیء از کلاس User نمایانگر یه رکورد تو جدول users می‌شه.

چند تا سناریو رو با هم ببینیم:

1⃣ ذخیره کردن داده:
یه شیء از کلاس User می‌سازی، مقادیرش رو پر می‌کنی و با یه متد مثل save() ذخیره‌اش می‌کنی. ORM این کار رو به یه دستور SQL (مثل INSERT) تبدیل می‌کنه و اجرا می‌کنه.

user = User(name='علی', email='[email protected]')
user.save()


2⃣ خوندن داده:
میتونی به جای کوئری SQL، از متدهایی مثل all() یا filter() استفاده می‌کنی. ORM پشت صحنه کوئری مناسب رو می‌سازه و داده‌ها رو به شکل اشیاء برمی‌گردونه.


   # همه کاربرها
users = User.objects.all()

# فیلتر کردن
ali_users =
User.objects.filter(name='علی')


به همین سادگی ORM تمام پیچیدگی‌های کار با دیتابیس رو از دید تو مخفی می‌کنه و یه رابط کاربری راحت بهت می‌ده.

البته هر orm با orm های دیگه فرق داره هرچی یه orm بیشتر abstraction انجام داده باشه استفاده ازش راحت تر میشه
ولی توی مقیاس بالاتر همین سادگی باعث پیچیدگی میشه.
🚀 ORM برای چی به وجود اومد؟

قبل از اینکه ORMها باشن، برنامه‌نویس‌ها مستقیم با SQL کار می‌کردن. (هرچند همین الانشم توی زبان های هایی که orm مناسبی براش ساخته نشده برنامه نویسان بصورت خام کد sql میزنن مثل برنامه نویسان golang)

این چند تا مشکل داشت و داره:

کدهای طولانی:
برای هر عملیات ساده، باید یه کوئری SQL می‌نوشتی که گاهی خیلی پیچیده می‌شد.

خطای زیاد:
یه اشتباه کوچیک تو کوئری (مثل یه typo) می‌تونست ساعت‌ها وقتت رو تلف کنه.

سختی نگهداری:
اگه ساختار دیتابیست عوض می‌شد (مثلاً یه ستون اضافه یا کم می‌شد)، باید همه کوئری‌ها رو دستی تغییر می‌دادی.

تفاوت پارادایم:
‏ SQL یه زبون declarative (اعلانی) هست، ولی زبون‌هایی مثل پایتون imperative (دستوری) هستن. این یعنی برنامه‌نویس باید مدام بین دو مدل فکری جابه‌جا می‌شد.

ORM اومد که این مشکلات رو حل کنه:

سادگی:
کار با دیتابیس مثل کار با اشیاء تو زبون خودت می‌شه.

امنیت:
‏ORMها معمولاً جلوی حملاتی مثل SQL Injection رو می‌گیرن.

انعطاف‌پذیری:
می‌تونی دیتابیس رو عوض کنی (مثلاً از MySQL بری به PostgreSQL) بدون اینکه کل کدت رو تغییر بدی.

سرعت توسعه:
چون کوئری‌نویسی کمتر می‌شه، وقت بیشتری برای منطق اصلی برنامه‌ات داری.

جمع‌بندی
ORM یه ابزار باحال و قدرتمنده که کار با دیتابیس رو برای برنامه‌نویس‌ها راحت‌تر، سریع‌تر و امن‌تر می‌کنه. با ORM دیگه لازم نیست با SQL خام کلنجار بری و می‌تونی با همون زبون برنامه‌نویسی‌ات همه‌چیز رو مدیریت کنی.

#️⃣ #database #sql #orm


🥷 CHANNEL | GROUP
14👍4
Fantastic
🤩19🔥2👍1
مقاله بعدی درمورد داکرایز کردن پروژه توی fastapi هست
(اگه ایده ای هم برای مقالات دارید خوشحال میشم بشنوم)
🔥17👍4
فردا کتاب boost your djangoDx رو میزارم :)
پیشاپیش عیدتون مبارک ❤️
🔥27