Forwarded from Python BackendHub
backend.pdf
139.7 KB
این مسیر roadmap بک انده. خیلی استاندارد و تمیزه. از سایت roadmap.sh. بهتر از این من ندیدم جایی. یکم کلاد و دوآپس هم بهش اضافه کنید.
اینا رو شما باید بلد باشین. اما بلد بودن چند درجه داره. در درجه اول اینه که اسمشو شنیده باشین. توصیه میکنم حداقل ۳-۴ روز راجب تک تک آیتم های تو این رودمپ یک تحقیق کنید که بدونید چی هستن تا مسیر براتون مشخص باشه.
در درجه دوم شما یک استفاده کوچیک کردین. مثلا تو سلری بروکر رو گذاشتین ریبت. تا اینجا اصلا بلد نیستین درواقع.
تو مرحله سوم شما کمی عمیقتر میشین. ازش استفاده میکنید و چالش هایی تو استفاده ازش بهش برمیخورین. مقاله مختلف میخونید و کارتونو درمیارین. میتونید راجب اون چیز حداقل ۲۰ دقیقه حرف بزنید. بگن ربیت چیه میتونید ۲۰ دقیقه توضیح بدین. تو این level شما یک دانش کاربردی و مختصر دارین. و در نهایت شما کتاب میخونید. عمیق تر میشین. تو پروداکتتون استفاده پیچیده تر میکنید و باهاش بیشتر دست و پنجه نرم میکنید. و تو مرحله اخرم میرین internal اش رو میخونید و حتی contribute میکنید که میشین اکسپرت اون چیز.
@ManiFoldPython
اینا رو شما باید بلد باشین. اما بلد بودن چند درجه داره. در درجه اول اینه که اسمشو شنیده باشین. توصیه میکنم حداقل ۳-۴ روز راجب تک تک آیتم های تو این رودمپ یک تحقیق کنید که بدونید چی هستن تا مسیر براتون مشخص باشه.
در درجه دوم شما یک استفاده کوچیک کردین. مثلا تو سلری بروکر رو گذاشتین ریبت. تا اینجا اصلا بلد نیستین درواقع.
تو مرحله سوم شما کمی عمیقتر میشین. ازش استفاده میکنید و چالش هایی تو استفاده ازش بهش برمیخورین. مقاله مختلف میخونید و کارتونو درمیارین. میتونید راجب اون چیز حداقل ۲۰ دقیقه حرف بزنید. بگن ربیت چیه میتونید ۲۰ دقیقه توضیح بدین. تو این level شما یک دانش کاربردی و مختصر دارین. و در نهایت شما کتاب میخونید. عمیق تر میشین. تو پروداکتتون استفاده پیچیده تر میکنید و باهاش بیشتر دست و پنجه نرم میکنید. و تو مرحله اخرم میرین internal اش رو میخونید و حتی contribute میکنید که میشین اکسپرت اون چیز.
@ManiFoldPython
👍7
جنگولرن
✅ مطلبی از لینکدین Saeed Shahrivari Joghan لینک پست در کامنت سری مهندسی نرمافزار: پست1 اولین پست سری مهندسی نرمافزار رو با تعریف خود نرمافزار شروع میکنم. شاید در نگاه اول تعریف نرمافزار برای اغلب افراد کامپیوتری خیلی بدیهی باشه اما بد نیست همین الان…
سری مهندسی نرمافزار: پست 2
از لینکدین Saeed Shahrivari Joghan
لینک پست در کامنت
سری مهندسی نرمافزار: پست 2
در پست قبلی راجع به نرمافزار صحبت کردم و به این رسیدیم که نرمافزار شامل کد،داده، و مستندات میشه:
https://lnkd.in/d5Dwkxbt
حالا میخوام یه مقداری راجع به مهندسی نرمافزار صحبت کنم. اجازه بدید چند تعریف معروف رو ببینیم:
- «یک نظام مهندسی که شامل هرچیزی درباره تولید نرمافزار میشه» از سامرویل
- «پایه گذاری و استفاده از اصول مهندسی برای تولید نرمافزار اقتصادی و کارآمد» از بایر
- «استفاده از یک رویکرد سیستماتیک،منظم، و قابل سنجش برای توسعه، عملیات، و نگهداشت نرمافزار» از IEEE
من اگه بخام نکات مهم در تعاریف بالا رو خلاصه کنم میتونم بگم که:
۱- مهندسی نرمافزار یک رویکرد منظم و مهندسی شده باید باشه که شامل فرآیندی کارآمد و قابل سنجش میشه
۲- خروجی مهندسی نرمافزار باید یک محصول نرمافزاری خوب و باکیفیت و مقرون به صرفه و ... باشه (که فعلا از این ویژگیها میگذریم)
۳- به صورت طبیعی باید در این فرآیند مهندسی از ابزارهای مناسبی هم برای توسعه، عملیات، و نگهداشت استفاده بشه
حالا با تبیین مفهوم نرمافزار و مهندسی نرمافزار فقط یه مفهوم دیگه میمونه که مفاهیم پایه ما تکمیل بشه و اونم چیزی نیست جز: «مهندس نرمافزار»
«مهندس نرمافزار کسیه که با استفاده از اصول مهندسی نرمافزار و ابزارهای مربوطه محصول نرمافزاری میسازه»
الان دیگه محورهای اساسی مباحث رو شناختیم یعنی: «نرمافزار»، «مهندسی نرمافزار»، و «مهندس نرمافزار»
از این به بعد تقریبا اغلب مباحثی رو که در ادامه میبینیم به یک یا چند تا از موارد فوق مربوط میشه. برای مثال اگه راجع به آرایش تیمی افراد صحبت کنیم بیشتر به مهندسین مربوطه یا اگه راجع به فرآیند چابک و واکنش به تغییرات صحبت کنیم بیشتر به مهندسی نرمافزار مربوط میشه و اگه راجع به کیفیت کد صحبت کنیم بیشتر به خود نرمافزار مربوطه. در ادامه من سعی میکنم به مرور تو هر سه محور به موازات پست داشته باشیم ولی فعلا فکر کنم برای رعایت اختصار این پست رو تموم کنیم بهتره.
hashtag#software
hashtag#softwareengineering
از لینکدین Saeed Shahrivari Joghan
لینک پست در کامنت
سری مهندسی نرمافزار: پست 2
در پست قبلی راجع به نرمافزار صحبت کردم و به این رسیدیم که نرمافزار شامل کد،داده، و مستندات میشه:
https://lnkd.in/d5Dwkxbt
حالا میخوام یه مقداری راجع به مهندسی نرمافزار صحبت کنم. اجازه بدید چند تعریف معروف رو ببینیم:
- «یک نظام مهندسی که شامل هرچیزی درباره تولید نرمافزار میشه» از سامرویل
- «پایه گذاری و استفاده از اصول مهندسی برای تولید نرمافزار اقتصادی و کارآمد» از بایر
- «استفاده از یک رویکرد سیستماتیک،منظم، و قابل سنجش برای توسعه، عملیات، و نگهداشت نرمافزار» از IEEE
من اگه بخام نکات مهم در تعاریف بالا رو خلاصه کنم میتونم بگم که:
۱- مهندسی نرمافزار یک رویکرد منظم و مهندسی شده باید باشه که شامل فرآیندی کارآمد و قابل سنجش میشه
۲- خروجی مهندسی نرمافزار باید یک محصول نرمافزاری خوب و باکیفیت و مقرون به صرفه و ... باشه (که فعلا از این ویژگیها میگذریم)
۳- به صورت طبیعی باید در این فرآیند مهندسی از ابزارهای مناسبی هم برای توسعه، عملیات، و نگهداشت استفاده بشه
حالا با تبیین مفهوم نرمافزار و مهندسی نرمافزار فقط یه مفهوم دیگه میمونه که مفاهیم پایه ما تکمیل بشه و اونم چیزی نیست جز: «مهندس نرمافزار»
«مهندس نرمافزار کسیه که با استفاده از اصول مهندسی نرمافزار و ابزارهای مربوطه محصول نرمافزاری میسازه»
الان دیگه محورهای اساسی مباحث رو شناختیم یعنی: «نرمافزار»، «مهندسی نرمافزار»، و «مهندس نرمافزار»
از این به بعد تقریبا اغلب مباحثی رو که در ادامه میبینیم به یک یا چند تا از موارد فوق مربوط میشه. برای مثال اگه راجع به آرایش تیمی افراد صحبت کنیم بیشتر به مهندسین مربوطه یا اگه راجع به فرآیند چابک و واکنش به تغییرات صحبت کنیم بیشتر به مهندسی نرمافزار مربوط میشه و اگه راجع به کیفیت کد صحبت کنیم بیشتر به خود نرمافزار مربوطه. در ادامه من سعی میکنم به مرور تو هر سه محور به موازات پست داشته باشیم ولی فعلا فکر کنم برای رعایت اختصار این پست رو تموم کنیم بهتره.
hashtag#software
hashtag#softwareengineering
Linkedin
Saeed Shahrivari Joghan on LinkedIn: #software #softwareengineering | 15 comments
سری مهندسی نرمافزار: پست ۱
اولین پست سری مهندسی نرمافزار رو با تعریف خود نرمافزار شروع میکنم. شاید در نگاه اول تعریف نرمافزار برای اغلب افراد کامپیوتری… | 15 comments on LinkedIn
اولین پست سری مهندسی نرمافزار رو با تعریف خود نرمافزار شروع میکنم. شاید در نگاه اول تعریف نرمافزار برای اغلب افراد کامپیوتری… | 15 comments on LinkedIn
❤1👍1
جنگولرن
✅ بالاخره بریم برای مطالعه کتاب Fluent Python شاید با این کتاب یکم پایتون یاد بگیریم اگه نکته خاصی وجود داشت. توی کامنت های همین پست قرار میدم.
✅ اولین چیزی که از کتاب Fluent Python یاد گرفتم فانکشن namedtuple بود
در واقع factory function ع namedtuple
✔️این فانکشن ساخته شده تا کار کردن با tuple ها اصولی تر یا بهتر بگم Pythonic بشه. تاپل رو مثل یه class میسازه و قابلیتی میده که با اسم به فیلدهای tuple دسترسی داشته باشیم. در حالت عادی از اندیس ها استفاده می کنیم یا از loop استفاده می کنیم.
توضیحات بیشتر توی لینک های زیر:
https://realpython.com/python-namedtuple/
https://quera.org/blog/collections-in-python/#namedtuple
در واقع factory function ع namedtuple
✔️این فانکشن ساخته شده تا کار کردن با tuple ها اصولی تر یا بهتر بگم Pythonic بشه. تاپل رو مثل یه class میسازه و قابلیتی میده که با اسم به فیلدهای tuple دسترسی داشته باشیم. در حالت عادی از اندیس ها استفاده می کنیم یا از loop استفاده می کنیم.
توضیحات بیشتر توی لینک های زیر:
https://realpython.com/python-namedtuple/
https://quera.org/blog/collections-in-python/#namedtuple
👍4
Media is too big
VIEW IN TELEGRAM
✅ شی گرایی چیست؟
بخشی از آپدیت جدید دوره فروشگاه اینترنتی با جنگو
✔️این قسمت مفهوم شی گرایی رو خیلی ساده توضیح دادم.
✔️اگه میخوای جنگو رو بهتر یاد بگیری لازمه شی گرایی بلد باشی.
هر انتقاد یا پیشنهادی به این قسمت دارید به @miladhzz پیام بدید.
تشکر
بخشی از آپدیت جدید دوره فروشگاه اینترنتی با جنگو
✔️این قسمت مفهوم شی گرایی رو خیلی ساده توضیح دادم.
✔️اگه میخوای جنگو رو بهتر یاد بگیری لازمه شی گرایی بلد باشی.
هر انتقاد یا پیشنهادی به این قسمت دارید به @miladhzz پیام بدید.
تشکر
👍5👏1
Forwarded from Django Expert (Amir Motahari)
کلاس های انتزاعی پایه یا Abstract Base Classes در پایتون(در ۶ دقیقه)
زمان ویدیو اینقدر کم هست که لازم نباشه اینجا خلاصه شو بگم، برید ببینید :)
لینک ویدیو:
https://youtu.be/oD45P7RdqWs
™ @DjangoIR
〰️〰️〰️〰️〰️〰️
© @DjangoEx | @mthri_tips
زمان ویدیو اینقدر کم هست که لازم نباشه اینجا خلاصه شو بگم، برید ببینید :)
لینک ویدیو:
https://youtu.be/oD45P7RdqWs
™ @DjangoIR
〰️〰️〰️〰️〰️〰️
© @DjangoEx | @mthri_tips
🔥5👎2👍1
✅ یادگیری شی و کلاس با Clash of Clans
در جلسه پنجاه و ششم از دوره رایگان زبان پایتون، به معرفی شی (object) و کلاس (class) با استفاده از بازی کلش آو کلنز پرداختیم.
مدرس: احمد احمدی
لینک آپارات:
https://www.aparat.com/v/4TwKO
لینک دوره در کامنت
در جلسه پنجاه و ششم از دوره رایگان زبان پایتون، به معرفی شی (object) و کلاس (class) با استفاده از بازی کلش آو کلنز پرداختیم.
مدرس: احمد احمدی
لینک آپارات:
https://www.aparat.com/v/4TwKO
لینک دوره در کامنت
👍5❤3👏1
Forwarded from Pythonism
به جمع برخی از ویژگیهای جذاب دیتابیس در پایتون خوش اومدین!!🤩
در زیر چند مثال طریقه استفاده از دیتابیس در پایتون رو براتون آوردم:
1. استفاده از SQLite با کتابخانه sqlite3:
2. استفاده از MySQL با کتابخانه mysql-connector-python:
3. استفاده از MongoDB با کتابخانه pymongo:
#FXL
در زیر چند مثال طریقه استفاده از دیتابیس در پایتون رو براتون آوردم:
1. استفاده از SQLite با کتابخانه sqlite3:
python
import sqlite3
# ایجاد ارتباط با پایگاه داده SQLite
conn = sqlite3.connect('mydatabase.db')
# ایجاد یک cursor
cursor = conn.cursor()
# ایجاد جدول
cursor.execute('''CREATE TABLE employees
(id INT PRIMARY KEY NOT NULL, name TEXT NOT NULL, age INT NOT NULL)''')
# افزودن رکوردها
cursor.execute("INSERT INTO employees (id, name, age) VALUES (1, 'John Doe', 30)")
cursor.execute("INSERT INTO employees (id, name, age) VALUES (2, 'Jane Doe', 25)")
# ذخیره تغییرات
conn.commit()
# دریافت و نمایش رکوردها
cursor.execute("SELECT * FROM employees")
rows = cursor.fetchall()
for row in rows:
print(row)
# بستن ارتباط
conn.close()
2. استفاده از MySQL با کتابخانه mysql-connector-python:
python
import mysql.connector
# ایجاد ارتباط با سرور MySQL
conn = mysql.connector.connect(
host='localhost',
user='username',
password='password',
database='mydatabase'
)
# ایجاد یک cursor
cursor = conn.cursor()
# افزودن رکوردها
cursor.execute("INSERT INTO employees (id, name, age) VALUES (1, 'John Doe', 30)")
cursor.execute("INSERT INTO employees (id, name, age) VALUES (2, 'Jane Doe', 25)")
# ذخیره تغییرات
conn.commit()
# دریافت و نمایش رکوردها
cursor.execute("SELECT * FROM employees")
rows = cursor.fetchall()
for row in rows:
print(row)
# بستن ارتباط
conn.close()
3. استفاده از MongoDB با کتابخانه pymongo:
python
from pymongo import MongoClient
# ایجاد ارتباط با سرور MongoDB
client = MongoClient('mongodb://localhost:27017/')
# انتخاب دیتابیس
db = client['mydatabase']
# انتخاب یک کلکشن (جدول)
collection = db['employees']
# افزودن رکوردها
collection.insert_one({"id": 1, "name": "John Doe", "age": 30})
collection.insert_one({"id": 2, "name": "Jane Doe", "age": 25})
# دریافت و نمایش رکوردها
documents = collection.find()
for document in documents:
print(document)
# بستن ارتباط
client.close()
#FXL
👍12🔥4
✅ پستی با مسما از کانال Sadra
آدرس کانال https://t.iss.one/lnxpylnxpy
یه جمله خیلی بامسما در کتاب Clean Code in Python هست که میگه:
Having maintainable software is not about anticipating future requirements (do not do futurology!)
ترجمه: داشتن یه نرمافزار قابلنگهداری به معنی پیشبینی نیازمندیهای آینده نیست. (آیندهپژوهی نکنید!)
اینجا "پیشبینی" به معنی تخصیص انرژی و زمان واسه ساخت یه بستر برای توسعه سادهتر در آینده با توجه به نیازمندیهایی هست که بعدها ممکنه بوجود بیان.
منظور اینه که بجای اینکه بیایم ذهنیت، معماری و دیزاین رو محدود به آینده کنیم، سعی کنیم نیازمندیهای فعلی رو برطرف کنیم.
یه مثال کاربردی میزنم تا درک این قضیه سادهتر شه. فرض کنید شما یه Shop طراحی کردید و فقط یه متد پرداخت دارید و اونم PayPal هست. درحالی که دارید کلاس PayPal رو طراحی میکنید، این فکر به ذهنتون خطور میکنه که شاید بعدها متد پرداخت Stripe هم به سیستم اضافه شد. اونوقت من باید یه کلاس عین PayPal واسه Stripe درست کنم.. چرا از همین الان یه Base Class درست نکنم و PayPal و Stripe از اون بیسکلس ارثبری نکنن؟
موضوع اینه که هنوز نه به باره.. نه به داره.. استرایپ کو؟! داری عملا از دیزاینپترنی استفاده میکنی که اصلا نیازی بهش نداری. بله. درسته. این یه دیزاین OOP پرفکت هست و بهتره که همچین حرکتی رو بزنی ولی آیا الان؟!
اینجاست که Over-engineering کار دست آدم میده. بنظرم این دو موضوع Overengineering و Overthinking در کنار هم میان. تمرکزتون رو بذارید روی نیازمندیهای فعلی و سعی کنید سلوشن خوب برای الان بدید.. بعدا با تغییر نیازمندیها، میتونید سراغ دیزاینپترنها و متدلوژیها و معماریهای پیچیدهتر هم برید!
آدرس کانال https://t.iss.one/lnxpylnxpy
یه جمله خیلی بامسما در کتاب Clean Code in Python هست که میگه:
Having maintainable software is not about anticipating future requirements (do not do futurology!)
ترجمه: داشتن یه نرمافزار قابلنگهداری به معنی پیشبینی نیازمندیهای آینده نیست. (آیندهپژوهی نکنید!)
اینجا "پیشبینی" به معنی تخصیص انرژی و زمان واسه ساخت یه بستر برای توسعه سادهتر در آینده با توجه به نیازمندیهایی هست که بعدها ممکنه بوجود بیان.
منظور اینه که بجای اینکه بیایم ذهنیت، معماری و دیزاین رو محدود به آینده کنیم، سعی کنیم نیازمندیهای فعلی رو برطرف کنیم.
یه مثال کاربردی میزنم تا درک این قضیه سادهتر شه. فرض کنید شما یه Shop طراحی کردید و فقط یه متد پرداخت دارید و اونم PayPal هست. درحالی که دارید کلاس PayPal رو طراحی میکنید، این فکر به ذهنتون خطور میکنه که شاید بعدها متد پرداخت Stripe هم به سیستم اضافه شد. اونوقت من باید یه کلاس عین PayPal واسه Stripe درست کنم.. چرا از همین الان یه Base Class درست نکنم و PayPal و Stripe از اون بیسکلس ارثبری نکنن؟
موضوع اینه که هنوز نه به باره.. نه به داره.. استرایپ کو؟! داری عملا از دیزاینپترنی استفاده میکنی که اصلا نیازی بهش نداری. بله. درسته. این یه دیزاین OOP پرفکت هست و بهتره که همچین حرکتی رو بزنی ولی آیا الان؟!
اینجاست که Over-engineering کار دست آدم میده. بنظرم این دو موضوع Overengineering و Overthinking در کنار هم میان. تمرکزتون رو بذارید روی نیازمندیهای فعلی و سعی کنید سلوشن خوب برای الان بدید.. بعدا با تغییر نیازمندیها، میتونید سراغ دیزاینپترنها و متدلوژیها و معماریهای پیچیدهتر هم برید!
🔥8👍2
✅ از قدیم گفتن کد حرفه ای هارو نگاه کن
فروشگاه اوپن سورس Saleor که با جنگو نوشته شده، نمونه خوبی هست برای یادگیری
ازش میشه یاد گرفت چه اپ هایی داشته باشیم
ارث بری مدل ها چطوری باشه
مقادیر ثابت و Enum و... رو چطوری هندل کنیم
کد تخفیف، قیمت مختلف بر حسب ویژگی های متفاوت و خیلی نکات دیگه برای یادگیری داره
لینک (فورک شده):
https://github.com/miladhzz/saleor
فروشگاه اوپن سورس Saleor که با جنگو نوشته شده، نمونه خوبی هست برای یادگیری
ازش میشه یاد گرفت چه اپ هایی داشته باشیم
ارث بری مدل ها چطوری باشه
مقادیر ثابت و Enum و... رو چطوری هندل کنیم
کد تخفیف، قیمت مختلف بر حسب ویژگی های متفاوت و خیلی نکات دیگه برای یادگیری داره
لینک (فورک شده):
https://github.com/miladhzz/saleor
👍18🔥4
Forwarded from Golem Course
دستیاران آموزشیام در درس تحلیل و طراحی سیستمها در این ترم زحمت زیادی کشیدند و مجموعهای از ویدیوهای آموزشی را برای دانشجویان آماده کردند.
باور دارم این محتوا برای اعضای این کانال هم بسیار مفید است.
کارگاه کافکا (تهیه شده توسط محمدطه جهانینژاد):
https://drive.google.com/file/d/1k3zZRXYdKaF7ew5-doyRzZ6Mp204j-Bb/view?usp=sharing
کارگاه داکر (تهیه شده توسط حسین سمیعی):
https://drive.google.com/drive/folders/16rwbD6hs_n-Gx2_rbHjDMre34ReenB7m?usp=sharing
کارگاه CI/CD (تهیه شده توسط محمدصادق مجیدی یزدی):
https://drive.google.com/drive/folders/1FczGY_qJ8LYSS9qJuiJk-0s-Oa46Ko_s?usp=sharing
کارگاه مانیتورینگ (تهیه شده توسط کمیل یحییزاده):
https://drive.google.com/drive/folders/1eu8ftc6LfD5Xb6C_C-bny7BHQu3EXP9E?usp=sharing
@golemcourse
باور دارم این محتوا برای اعضای این کانال هم بسیار مفید است.
کارگاه کافکا (تهیه شده توسط محمدطه جهانینژاد):
https://drive.google.com/file/d/1k3zZRXYdKaF7ew5-doyRzZ6Mp204j-Bb/view?usp=sharing
کارگاه داکر (تهیه شده توسط حسین سمیعی):
https://drive.google.com/drive/folders/16rwbD6hs_n-Gx2_rbHjDMre34ReenB7m?usp=sharing
کارگاه CI/CD (تهیه شده توسط محمدصادق مجیدی یزدی):
https://drive.google.com/drive/folders/1FczGY_qJ8LYSS9qJuiJk-0s-Oa46Ko_s?usp=sharing
کارگاه مانیتورینگ (تهیه شده توسط کمیل یحییزاده):
https://drive.google.com/drive/folders/1eu8ftc6LfD5Xb6C_C-bny7BHQu3EXP9E?usp=sharing
@golemcourse
👍6❤2🔥2👏1
Forwarded from آموزش پایتون، دوآپس و مهندسی نرم افزار | BobyCloud (Boby Cloud)
✅ در ویدیو جدید بابی در نقش یک آتش نشان فداکار به سراغ مبحث تست نویسی در مهندسی نرم افزار میره و راجع به Smoke Test (تست دود) صحبت میکنه. همچنین یک نمونه Smoke Test با استفاده از سلنیوم در پایتون روی وبسایت LeetCode پیاده سازی میکنیم.
🔥 تست دود نوعی تست نرم افزار هست که پس از انجام تغییرات در نرم افزار انجام میشود تا اطمینان حاصل شود که ویژگی های اصلی نرم افزار به درستی عمل میکنند.
🖥 مشاهده در یوتوب
👉 Link: https://youtu.be/Mog3OaiSidE?si=Sgyo6udH4wQHWZNg
〰️〰️〰️〰️〰️〰️
@BobyDotCloud
🔥 تست دود نوعی تست نرم افزار هست که پس از انجام تغییرات در نرم افزار انجام میشود تا اطمینان حاصل شود که ویژگی های اصلی نرم افزار به درستی عمل میکنند.
🖥 مشاهده در یوتوب
👉 Link: https://youtu.be/Mog3OaiSidE?si=Sgyo6udH4wQHWZNg
〰️〰️〰️〰️〰️〰️
@BobyDotCloud
❤2🔥1
سری مهندسی نرمافزار: پست 3
از لینکدین Saeed Shahrivari Joghan
لینک پست در کامنت
احتمالاً در صحبت با دوستان و همکاران یا در فضای مجازی به کتابهای پیشنهادی متعددی برای مطالعه (مثلاً کتاب کد تمیز) برخورد کرده باشید. با وجود اینکه مطالعه این کتابها مفیده اما از دید من کتابهای مهمتر و پایهایتری برای مطالعه قبل از این کتابها وجود داره که بهتره اول در اون زمینهها مفاهیم پایهای رو به طور صحیح یاد بگیریم.
از دید من یه مهندس نرمافزار باید در ۷ حوزه، مطالعات پایهای مناسبی داشته باشه:
- برنامه نویسی
- ساختار دادهها و الگوریتم
- معماری کامپیوتر
- پایگاه داده
- سیستم عامل
- شبکههای کامپیوتری
- مهندسی نرمافزار
دقت کنید که منظور من صرفاً توسعهدهندهها نیستند و این ۷ حوزه برای طیفهای مختلف مهندسین نرمافزار از توسعهدهنده تا دواپس و تحلیلگر مفیده. من در مقاله زیر که در ویرگول منتشر کردم به طور مفصل راجع به این ۷ حوزه صحبت کردم و برای هر کدوم یه کتاب مناسب معرفی کردم. اگه کتابهای معرفی شده رو مناسب دیدید لطفاً تا جای ممکن این پست رو به اشتراک بذارید تا به دست افراد بیشتری برسه.
https://vrgl.ir/jl1SF
از لینکدین Saeed Shahrivari Joghan
لینک پست در کامنت
احتمالاً در صحبت با دوستان و همکاران یا در فضای مجازی به کتابهای پیشنهادی متعددی برای مطالعه (مثلاً کتاب کد تمیز) برخورد کرده باشید. با وجود اینکه مطالعه این کتابها مفیده اما از دید من کتابهای مهمتر و پایهایتری برای مطالعه قبل از این کتابها وجود داره که بهتره اول در اون زمینهها مفاهیم پایهای رو به طور صحیح یاد بگیریم.
از دید من یه مهندس نرمافزار باید در ۷ حوزه، مطالعات پایهای مناسبی داشته باشه:
- برنامه نویسی
- ساختار دادهها و الگوریتم
- معماری کامپیوتر
- پایگاه داده
- سیستم عامل
- شبکههای کامپیوتری
- مهندسی نرمافزار
دقت کنید که منظور من صرفاً توسعهدهندهها نیستند و این ۷ حوزه برای طیفهای مختلف مهندسین نرمافزار از توسعهدهنده تا دواپس و تحلیلگر مفیده. من در مقاله زیر که در ویرگول منتشر کردم به طور مفصل راجع به این ۷ حوزه صحبت کردم و برای هر کدوم یه کتاب مناسب معرفی کردم. اگه کتابهای معرفی شده رو مناسب دیدید لطفاً تا جای ممکن این پست رو به اشتراک بذارید تا به دست افراد بیشتری برسه.
https://vrgl.ir/jl1SF
👍9
✅ پست سوالی از لینکدین Hesam Attari در مورد مایکروسرویس (یا میکروسرویس)
کامنت های پستش رو بخونید. نکات خوبی داره. (لینک)
از مایکروسرویس چه میخواهید؟ چه مشکلی در پروژه یافته اید و یا چه مشکلی را در پروژه میخواهید حل کنید که به سراغ مایکروسرویس کردن می روید؟
برخی فکر می کنند چون پروژه بزرگ میشود باید سراغ مایکروسرویس کردن پروژه رفت. اصلن میدانید مثلا هنگام پابلیش کردن چه مسائلی ممکن است به وجود بیاید؟
حالا فرض کنیم مشکل را پیدا کردید چاره ای هم ندارید و میخواهید سراغ مایکروسرویس کردن بروید. چرا از همان اول api gateway میگذارید؟ با تمام مزایایش میدانید چه پیچیدگی هایی به وجود می آید؟
قریب به اتفاق پروژه ها فرآیندهای مهندسی نرم افزار ندارند یا کامل رعایت نمیکنند. همین مهندسی را در پروژه ها رعایت کنید بسیاری از مشکلات شما حل می شود. کافیست که r&d کنید. همین را در دانشگاه میتوانید تمرین کنید و یا نکردید هم می توانید موضوعات را جستجو کنید.
#softwareengineering
کامنت های پستش رو بخونید. نکات خوبی داره. (لینک)
از مایکروسرویس چه میخواهید؟ چه مشکلی در پروژه یافته اید و یا چه مشکلی را در پروژه میخواهید حل کنید که به سراغ مایکروسرویس کردن می روید؟
برخی فکر می کنند چون پروژه بزرگ میشود باید سراغ مایکروسرویس کردن پروژه رفت. اصلن میدانید مثلا هنگام پابلیش کردن چه مسائلی ممکن است به وجود بیاید؟
حالا فرض کنیم مشکل را پیدا کردید چاره ای هم ندارید و میخواهید سراغ مایکروسرویس کردن بروید. چرا از همان اول api gateway میگذارید؟ با تمام مزایایش میدانید چه پیچیدگی هایی به وجود می آید؟
قریب به اتفاق پروژه ها فرآیندهای مهندسی نرم افزار ندارند یا کامل رعایت نمیکنند. همین مهندسی را در پروژه ها رعایت کنید بسیاری از مشکلات شما حل می شود. کافیست که r&d کنید. همین را در دانشگاه میتوانید تمرین کنید و یا نکردید هم می توانید موضوعات را جستجو کنید.
#softwareengineering
👍3
Forwarded from Microfrontend.ir
آموزش جامع داکر
** در این پلی لیست میخوام داکر رو از بیخ یاد بگیریم. یعنی قبل از داکر خودمون یه چیزی شبیه داکر اما خیلی ساده تر با پایتون بنویسم بعد بریم سراغ خود داکر که هم داکر رو یاد بگیریم و هم بدونیم پشت صحنه چه اتفاقاتی می افته!
در این ویدیو از آموزش جامع Docker به بررسی تاریخچه مجازی سازی و روش های مختلف آن پرداختیم. روش VM-Based برای مجازی سازی کامل یک ماشین و روش Container Based برای اجرای ایزوله فرایندها و پروسس ها مطرح کردیم. سپس مولفه های لازم برای ساخت کانتینر در سیستم عامل لینوکس را بررسی کردیم و در نهایت Docker و podman و rtk را به عنوان مهمترین Container runtime های حال حاضر معرفی کردیم و در نهایت مفهوم Container Orchestration و ضرورت آن را شرح دادیم.
Link: https://youtu.be/Z8olH4UzeA0
Playlsit: https://www.youtube.com/playlist?list=PLJ9zDGwhhsBzLTI3VNE8Vp4JpXNn_yRR7
〰️〰️〰️〰️〰️〰️
© @microfrontend_ir
** در این پلی لیست میخوام داکر رو از بیخ یاد بگیریم. یعنی قبل از داکر خودمون یه چیزی شبیه داکر اما خیلی ساده تر با پایتون بنویسم بعد بریم سراغ خود داکر که هم داکر رو یاد بگیریم و هم بدونیم پشت صحنه چه اتفاقاتی می افته!
در این ویدیو از آموزش جامع Docker به بررسی تاریخچه مجازی سازی و روش های مختلف آن پرداختیم. روش VM-Based برای مجازی سازی کامل یک ماشین و روش Container Based برای اجرای ایزوله فرایندها و پروسس ها مطرح کردیم. سپس مولفه های لازم برای ساخت کانتینر در سیستم عامل لینوکس را بررسی کردیم و در نهایت Docker و podman و rtk را به عنوان مهمترین Container runtime های حال حاضر معرفی کردیم و در نهایت مفهوم Container Orchestration و ضرورت آن را شرح دادیم.
Link: https://youtu.be/Z8olH4UzeA0
Playlsit: https://www.youtube.com/playlist?list=PLJ9zDGwhhsBzLTI3VNE8Vp4JpXNn_yRR7
〰️〰️〰️〰️〰️〰️
© @microfrontend_ir
❤9👍3
Media is too big
VIEW IN TELEGRAM
✅ ویدئوی معرفی تکنیک خم هیلبرت (Hilbert Curve) که Google Maps و Tinder برای مدلسازی موقعیت مکانی ازش استفاده می کنند.
مدرس: دکتر علیرضا آقامحمدی @golemcourse
کلاس درس تحلیل و طراحی سیستمها
توی این لینک (ویدئوی کاملش) میتونید توضیحات چند تکنیک مهم دیگه رو هم ببینید که شرکتهایی مثل گوگل، تیندر، لیفت، اسنپ و تسپی ازشون استفاده می کنند:
-تکنیک Geohashing که شرکتهایی نظیر Bing Maps و Lyft از آن استفاده میکنند.
-داده ساختار Quadtree که شرکت Yext آن را به کار میگیرد.
-خم هیلبرت (Hilbert Curve) که Google Maps و Tinder از آن بهره میبرند.
مدرس: دکتر علیرضا آقامحمدی @golemcourse
کلاس درس تحلیل و طراحی سیستمها
توی این لینک (ویدئوی کاملش) میتونید توضیحات چند تکنیک مهم دیگه رو هم ببینید که شرکتهایی مثل گوگل، تیندر، لیفت، اسنپ و تسپی ازشون استفاده می کنند:
-تکنیک Geohashing که شرکتهایی نظیر Bing Maps و Lyft از آن استفاده میکنند.
-داده ساختار Quadtree که شرکت Yext آن را به کار میگیرد.
-خم هیلبرت (Hilbert Curve) که Google Maps و Tinder از آن بهره میبرند.
🔥5
Forwarded from CodeCrafters (Mojtaba)
دستور GROUP BY در SQL
دستور GROUP BY در SQL برای گروهبندی رکوردها بر اساس مقادیر یک یا چند ستون استفاده میشود. با استفاده از این دستور میتوانید رکوردها را بر اساس مقادیر مشترک در ستونهای مورد نظر گروهبندی کرده و نتایج را بر اساس گروهها تجمیع کنید.
ساختار دستور GROUP BY به صورت زیر است:
به عنوان مثال، فرض کنید یک جدول به نام "employees" داریم که شامل ستونهای "name"، "department" و "salary" است. میخواهیم مجموع حقوق هر بخش را محاسبه کنیم. برای این کار از دستور GROUP BY استفاده میکنیم. دستور زیر نتیجه مورد نظر را به ما میدهد:
مثال دیگر، میتوانیم تعداد کارمندان هر بخش را محاسبه کنیم:
@Code_Crafters
دستور GROUP BY در SQL برای گروهبندی رکوردها بر اساس مقادیر یک یا چند ستون استفاده میشود. با استفاده از این دستور میتوانید رکوردها را بر اساس مقادیر مشترک در ستونهای مورد نظر گروهبندی کرده و نتایج را بر اساس گروهها تجمیع کنید.
ساختار دستور GROUP BY به صورت زیر است:
SELECT column1, column2, ..., aggregate_function(column)در این دستور، شما ابتدا ستونهایی که میخواهید نتایج را بر اساس آنها گروهبندی کنید، را در قسمت GROUP BY مشخص میکنید. سپس با استفاده از توابع تجمیعی مانند SUM، COUNT، AVG، MIN و MAX، میتوانید مقادیر ستونهای دیگر را برای هر گروه محاسبه کنید.
FROM table
GROUP BY column1, column2, ...
به عنوان مثال، فرض کنید یک جدول به نام "employees" داریم که شامل ستونهای "name"، "department" و "salary" است. میخواهیم مجموع حقوق هر بخش را محاسبه کنیم. برای این کار از دستور GROUP BY استفاده میکنیم. دستور زیر نتیجه مورد نظر را به ما میدهد:
SELECT department, SUM(salary)نتیجه این دستور شامل دو ستون "department" و "SUM(salary)" است. ستون "department" حاوی نام بخشها است و ستون "SUM(salary)" حاوی مجموع حقوق برای هر بخش است.
FROM employees
GROUP BY department
مثال دیگر، میتوانیم تعداد کارمندان هر بخش را محاسبه کنیم:
SELECT department, COUNT(employee_id)همچنین، میتوانیم میانگین حقوق کارمندان هر بخش را محاسبه کنیم:
FROM employees
GROUP BY department
SELECT department, AVG(salary)#SQL
FROM employees
GROUP BY department
@Code_Crafters
👍8
✅ تکلیف پایتون | Arithmetic Operations
از احمد احمدی
یک ایمیل از محسن (برنامهریز مالی) دریافت کردیم.
در این ایمیل از ما خواسته شده تا یکسری محاسبات مالی را با استفاده از پایتون و اُپراتورهای ریاضیاتیش انجام دهیم. طبق متن ایمیلِ اِرسالی از محسن، قرار هست که موارد زیر را با استفاده از پایتون کُدنویسی کنیم:
✔️سودناخالصِ حاصل از فروش یک جفت کفش سیاه
✔️نسبت سودحاشیه ای از فروش یک جفت کفش سیاه
✔️قیمت موردنیاز برای رسیدن به سود حاشیهای %60
✔️مقدار مالیات برای یک جفت کفش سیاه
✔️مقدار سرمایه نهایی که به آن میرسیم اگر سودناخالص حاصل از فروش 100 جفت کفش سیاه را سرمایه گذاری کنیم
لینک ویدئو
توی این ویدئو فقط سر سوال رو مطرح کرده
از احمد احمدی
یک ایمیل از محسن (برنامهریز مالی) دریافت کردیم.
در این ایمیل از ما خواسته شده تا یکسری محاسبات مالی را با استفاده از پایتون و اُپراتورهای ریاضیاتیش انجام دهیم. طبق متن ایمیلِ اِرسالی از محسن، قرار هست که موارد زیر را با استفاده از پایتون کُدنویسی کنیم:
✔️سودناخالصِ حاصل از فروش یک جفت کفش سیاه
✔️نسبت سودحاشیه ای از فروش یک جفت کفش سیاه
✔️قیمت موردنیاز برای رسیدن به سود حاشیهای %60
✔️مقدار مالیات برای یک جفت کفش سیاه
✔️مقدار سرمایه نهایی که به آن میرسیم اگر سودناخالص حاصل از فروش 100 جفت کفش سیاه را سرمایه گذاری کنیم
لینک ویدئو
توی این ویدئو فقط سر سوال رو مطرح کرده
👍1🔥1
Forwarded from مطالب رایگان و آزاد🎈 ( behrad)
* تست رگرسیون چیست؟
بر خلاف اسم قلمبهش خیلی چیز سادهایه،
ما یسری تست داریم به اسم یونیت-تستینگ،
Unit Testing
که میایم واحدهای درون برنامه رو جدا جدا تست میکنیم، بخونید ماژولهای مختلفش رو...
یه تست یکپارچگی داریم،
Integrity Testing
که ببینیم آیا این واحدها در کنار هم به درستی کار میکنن،
و یه تست کلی
System Testing
داریم که معلومه چیه...
یه تست پذیرش هم داریم، که قبلا ازش حرف زدم:
توی مهندسی نرمافزار ما یک نوع آزمون نرمافزار داریم به اسم آزمون پذیرش
Acceptance Testing
هدفش اینه که تست کنه این نرمافزار مورد پذیرش کاربر هست یا نه.
این آزمون پذیرش خودش دو نوع داره :
1-آلفا تستینگ
2-بتا تستینگ
و....
▪️نسخه آلفا و نسخه بتا چیست؟
و همهٔ اون خزعبلات...
=+=+=+=+=+=+=+=+=+=+=+=+=+
پس شد چهارتا تست:
Unit Testing
Integrity Testing
System Testing
Acceptance Testing
تست رگرسیون میگه که:
اگر تغییری توی نرمافزار اعمال کردی باید 3 تا تست اول لیست رو دوباره انجام بدی:)
همین....
یعنی از اونجایی که تغییرات جدید نرمافزار ممکنه روی قسمتهای قبلی که قبلا تست شدن و درست بودن اثر بذارن، بایـــــد 3 تست اول رو دوباره انجام بدی....
مثال کوچیکش توی پروژههای من و شما میشه که مثلا من یه جایی کد دیتابیسم رو تغییر میدم، یهو یه ماژولی که مربوط بوده به لاگین از کار میفته... چون APIیی رو کال میکرده که ایشون متدی رو صدا میزده که الان اسمش عوض شده:)
حالا اینجا توی یه سیستم کلاس جهانی میبینین یارو با کلاه کابوییش میاد میگه دکتر تو بخاطر حمله خونریزی قلبی پیلود رو عوض کردی، قبول، اما من یونیت/رگرسیون تست میکنم که مطمئن بشیم این تغییر به چیزی آسیب نمیزنه...
واسه همینه که پـــــچ کردن یه باگ گاها تا 90 روز طول میکشه....
یهو نمیتونن ساختار کل پروژه رو به هم بریزن...!
و واسه همینه که باگ ریپورت کردن عـــــــــرف و اصول داره...
که توضیح میدم...
میدونم طولانی شده ولی اهمیتی نمیدم🙃
=+=+=+=+=+=+=+=+=+=+=+=+=+
راستش من یخورده شیطنت کردم (🫣) این اسم "رگرسیون" رو از قصد آوردم که بتونیم بعدا بهانهای داشته باشیم که از "رگرسیون خطی" حرف بزنیم...
مفهومی ریاضیاتی که یکی از پایــــــههای اصلی یادگیری ماشین توی حوزه هوش مصنوعی هست...
خیلی چیز جذابیه... با یه لینیار رگرشن ساده، ماشین شما یاد میگیره چجوری تحلیل کنه و کلاس یه داده رو پیشبینی کنه...
میتونه از روی یه فاکتور از رفتار یه کاربر یه برازش بزنه روی نمودار و آینده رو پیشبینی کنه...
خیــــلی جذابه🫣💦✨...
واضحه که ازش در آینده حرف میزنیم(از اون قولها...)
بر خلاف اسم قلمبهش خیلی چیز سادهایه،
ما یسری تست داریم به اسم یونیت-تستینگ،
Unit Testing
که میایم واحدهای درون برنامه رو جدا جدا تست میکنیم، بخونید ماژولهای مختلفش رو...
یه تست یکپارچگی داریم،
Integrity Testing
که ببینیم آیا این واحدها در کنار هم به درستی کار میکنن،
و یه تست کلی
System Testing
داریم که معلومه چیه...
یه تست پذیرش هم داریم، که قبلا ازش حرف زدم:
توی مهندسی نرمافزار ما یک نوع آزمون نرمافزار داریم به اسم آزمون پذیرش
Acceptance Testing
هدفش اینه که تست کنه این نرمافزار مورد پذیرش کاربر هست یا نه.
این آزمون پذیرش خودش دو نوع داره :
1-آلفا تستینگ
2-بتا تستینگ
و....
▪️نسخه آلفا و نسخه بتا چیست؟
و همهٔ اون خزعبلات...
=+=+=+=+=+=+=+=+=+=+=+=+=+
پس شد چهارتا تست:
Unit Testing
Integrity Testing
System Testing
Acceptance Testing
تست رگرسیون میگه که:
اگر تغییری توی نرمافزار اعمال کردی باید 3 تا تست اول لیست رو دوباره انجام بدی:)
همین....
یعنی از اونجایی که تغییرات جدید نرمافزار ممکنه روی قسمتهای قبلی که قبلا تست شدن و درست بودن اثر بذارن، بایـــــد 3 تست اول رو دوباره انجام بدی....
مثال کوچیکش توی پروژههای من و شما میشه که مثلا من یه جایی کد دیتابیسم رو تغییر میدم، یهو یه ماژولی که مربوط بوده به لاگین از کار میفته... چون APIیی رو کال میکرده که ایشون متدی رو صدا میزده که الان اسمش عوض شده:)
حالا اینجا توی یه سیستم کلاس جهانی میبینین یارو با کلاه کابوییش میاد میگه دکتر تو بخاطر حمله خونریزی قلبی پیلود رو عوض کردی، قبول، اما من یونیت/رگرسیون تست میکنم که مطمئن بشیم این تغییر به چیزی آسیب نمیزنه...
واسه همینه که پـــــچ کردن یه باگ گاها تا 90 روز طول میکشه....
یهو نمیتونن ساختار کل پروژه رو به هم بریزن...!
و واسه همینه که باگ ریپورت کردن عـــــــــرف و اصول داره...
که توضیح میدم...
میدونم طولانی شده ولی اهمیتی نمیدم🙃
=+=+=+=+=+=+=+=+=+=+=+=+=+
راستش من یخورده شیطنت کردم (🫣) این اسم "رگرسیون" رو از قصد آوردم که بتونیم بعدا بهانهای داشته باشیم که از "رگرسیون خطی" حرف بزنیم...
مفهومی ریاضیاتی که یکی از پایــــــههای اصلی یادگیری ماشین توی حوزه هوش مصنوعی هست...
خیلی چیز جذابیه... با یه لینیار رگرشن ساده، ماشین شما یاد میگیره چجوری تحلیل کنه و کلاس یه داده رو پیشبینی کنه...
میتونه از روی یه فاکتور از رفتار یه کاربر یه برازش بزنه روی نمودار و آینده رو پیشبینی کنه...
خیــــلی جذابه🫣💦✨...
واضحه که ازش در آینده حرف میزنیم(از اون قولها...)
🔥5👍2
جنگولرن
✅ پیاده سازی Django Soft Delete از کانال @microfrontend_ir چندی پیش خبری منتشر شد که در توییتر حذف دادهها به درستی انجام نمیشود. واقعیت این است که در اغلب نرمافزارهای مدرن دادهها به صورت فیزیکی حذف نمیشوند و صرفا برچسپ حذف شده میگیرند. در این ویدیو…
✅ مشکل soft delete برای relation ها
اگه این ویدئو رو از کانال @microfrontend_ir دیده باشید. تقریبا همه حالت هارو برای Soft delete هندل کرده.
برای اینکه حذف واقعی اتفاق نیافته، متد delete مدل رو override می کنیم و میگیم جای حذف، رکورد رو آپدیت کن و...
ولی وقتی با اکشن پیشفرض delete ع ادمین، یک یا چند رکورد رو حذف کنیم، حذف واقعی اتفاق می افته.
✔️که Hêmn از default_manager_name استفاده کرد و این مورد هم هندل کرد.
✔️البته داکیومنت جنگو گفته میتونید متد delete_queryset رو override کنید یا اکشن کاستوم خودتون رو بنویسید. (راه های رسیدن به خدا زیاده)
❔اما اگه ما relation داشته باشیم باید چکار کنیم؟ فرض کنید جدول Person رو داریم و جدول Address کلید خارجی از نوع CASCADE داره. در این صورت با Soft delete رکورد person حذف میشه اما address های متصل بهش حذف نمیشن.
✔️اولین راهکاری که به ذهن من میرسه استفاده از Signals هست.
به نظر شما best practice ع این مورد چیه؟
آپدیت:
💬پاسخ Hêmn به سوالم:
در اصطلاح orm به اینها میگن مدیرت ابجکت های orphan و پیاده سازی های مختلف داره، من ترجیحم استفاده از دسکریپتور خود مدله، مدلهای جنگو برای روابطشون یک ریلیتد منیجر دارن که همه روابطشون رو مدیریت میکنه. یعنی شما با استفاده از این ویژگی میتونم همه مدل های مرتبط رو پیدا کنید و لاجیک مدنظرتونو اعمال کنید. اینم بگم بعضی وقتها بد هم نیست کل منطق سافت دیلیت در سطح دیتابیس اتفاق بیافته
اگه این ویدئو رو از کانال @microfrontend_ir دیده باشید. تقریبا همه حالت هارو برای Soft delete هندل کرده.
برای اینکه حذف واقعی اتفاق نیافته، متد delete مدل رو override می کنیم و میگیم جای حذف، رکورد رو آپدیت کن و...
ولی وقتی با اکشن پیشفرض delete ع ادمین، یک یا چند رکورد رو حذف کنیم، حذف واقعی اتفاق می افته.
✔️که Hêmn از default_manager_name استفاده کرد و این مورد هم هندل کرد.
✔️البته داکیومنت جنگو گفته میتونید متد delete_queryset رو override کنید یا اکشن کاستوم خودتون رو بنویسید. (راه های رسیدن به خدا زیاده)
❔اما اگه ما relation داشته باشیم باید چکار کنیم؟ فرض کنید جدول Person رو داریم و جدول Address کلید خارجی از نوع CASCADE داره. در این صورت با Soft delete رکورد person حذف میشه اما address های متصل بهش حذف نمیشن.
✔️اولین راهکاری که به ذهن من میرسه استفاده از Signals هست.
به نظر شما best practice ع این مورد چیه؟
آپدیت:
💬پاسخ Hêmn به سوالم:
در اصطلاح orm به اینها میگن مدیرت ابجکت های orphan و پیاده سازی های مختلف داره، من ترجیحم استفاده از دسکریپتور خود مدله، مدلهای جنگو برای روابطشون یک ریلیتد منیجر دارن که همه روابطشون رو مدیریت میکنه. یعنی شما با استفاده از این ویژگی میتونم همه مدل های مرتبط رو پیدا کنید و لاجیک مدنظرتونو اعمال کنید. اینم بگم بعضی وقتها بد هم نیست کل منطق سافت دیلیت در سطح دیتابیس اتفاق بیافته
❤2🔥2