یه سری از کد های پروژه های قدیمی رو review کردم و به چندتا نکته بر خورد کردم که اینجا به یکیش اشاره میکنم.
توی این پروژه که Nest.js هم بود ، دیدم توی بعضی از سرویس ها (مثلا) چک کرده بودم که اگر این email بود بیا و ادامه بده در غیر این صورت :
مشخصا این کد اصل DRY رو نقض میکنه.
*DRY (Don't Repeat Yourself)
و این Custom Pipe رو نوشتم :
سپس توی controller :
این Custom Pipe در NestJS بهعنوان بخشی از Request Pipeline عمل میکنه و دادههای ورودی رو قبل از رسیدن به کنترلر یا سرویس اعتبارسنجی میکنه. این باعث میشه منطق اعتبارسنجی از بیزینس لاجیک جدا بشه.
✅ نتیجه :
برای validationهایی که نیاز به وابستگی به سرویس دارن (مثل چک uniqueness تو دیتابیس)، استفاده از custom Pipe به جای چکهای تکراری تو سرویسها یک روش تمیز و استاندارده.
❗️میتونید از Middleware یا Custom Decorator هم استفاده کنید، ولی Pipe برای این سناریو سادهتر و مناسبتره.
#clean_code #nestjs
توی این پروژه که Nest.js هم بود ، دیدم توی بعضی از سرویس ها (مثلا) چک کرده بودم که اگر این email بود بیا و ادامه بده در غیر این صورت :
throw new BadRequestException('Email already exists');مشخصا این کد اصل DRY رو نقض میکنه.
*DRY (Don't Repeat Yourself)
و این Custom Pipe رو نوشتم :
@Injectable()
export class UniqueEmailPipe implements PipeTransform {
constructor(private readonly userService: UserService) {}
async transform(value: { email: string }, metadata: ArgumentMetadata) {
const exists = await this.userService.findByEmail(value.email);
if (exists) {
throw new BadRequestException('Email already exists');
}
return value;
}
}
سپس توی controller :
@Post()
create(@Body(UniqueEmailPipe) body: CreateUserDto) {
return this.userService.create(body);
}
این Custom Pipe در NestJS بهعنوان بخشی از Request Pipeline عمل میکنه و دادههای ورودی رو قبل از رسیدن به کنترلر یا سرویس اعتبارسنجی میکنه. این باعث میشه منطق اعتبارسنجی از بیزینس لاجیک جدا بشه.
✅ نتیجه :
برای validationهایی که نیاز به وابستگی به سرویس دارن (مثل چک uniqueness تو دیتابیس)، استفاده از custom Pipe به جای چکهای تکراری تو سرویسها یک روش تمیز و استاندارده.
❗️میتونید از Middleware یا Custom Decorator هم استفاده کنید، ولی Pipe برای این سناریو سادهتر و مناسبتره.
#clean_code #nestjs
در رابطه با پست قبلی یک از دوستان پرسید که روی Param و Multipart Form Data هم میشه از Custom Pipe استفاده کرد؟
باید بگیم که بله میشه.
✅ در مورد Param ، کلا در واقع هر جایی که بتونیم Decorator هایی مثل :
@Param(), @Query(), @Body()، @Headers()
و ... رو بزنیم ، Pipe هم میتونیم بهش attach کنیم.
یک نمونه کد از Param :
نمونه کد فایل :
و کد درون کلاس Pipe مون هم دقیقا همانند کلاسی هست که توی پست قبلی نوشتم.
باید بگیم که بله میشه.
✅ در مورد Param ، کلا در واقع هر جایی که بتونیم Decorator هایی مثل :
@Param(), @Query(), @Body()، @Headers()
و ... رو بزنیم ، Pipe هم میتونیم بهش attach کنیم.
یک نمونه کد از Param :
@Get(':id')
findOne(
@Param('id', CustomPipe) id: string
) {
//...
}نمونه کد فایل :
@Post('upload')
@UseInterceptors(FileInterceptor('file'))
uploadFile(
@UploadedFile(FilePipe) file: File
) {
//...
}و کد درون کلاس Pipe مون هم دقیقا همانند کلاسی هست که توی پست قبلی نوشتم.
❤2
چطور پارامترهای پیشفرض داینامیک برای تابعمون بسازیم؟🤔
میدونیم که میتونیم برای پارامتر های تابعمون یک مقدار پیشفرض بذاریم. مثال :
اما مقدار پیشفرض فقط به string یا number و bool محدود نمیشه! ما میتونیم از یک تابع به عنوان مقدار پیشفرض استفاده کنیم.
مثال:
اینجا اگر name داده نشه، تابع getDefaultName() صدا زده میشه.
❗️ ولی نکته مهم اینه که فقط زمانی که پارامتر undefined باشه این تابع اجرا میشه. یعنی :
✅ کاربرد : میتونیم مقادیر پیشفرض رو داینامیک بسازیم، مثلاً تاریخ، توکن، یا یه مقدار محاسبهای و ... .
#tip #js
میدونیم که میتونیم برای پارامتر های تابعمون یک مقدار پیشفرض بذاریم. مثال :
function greet(name="anonymous") {
console.log(`Hello , ${name}!`)
}اما مقدار پیشفرض فقط به string یا number و bool محدود نمیشه! ما میتونیم از یک تابع به عنوان مقدار پیشفرض استفاده کنیم.
مثال:
function greet(name = getDefaultName()) {
console.log(`Hello, ${name}!`);
}
function getDefaultName() {
console.log('getDefaultName called!');
return 'Guest';
}
greet('Reza'); // Hello, Reza!
greet(); // Hello, Guest! اینجا اگر name داده نشه، تابع getDefaultName() صدا زده میشه.
❗️ ولی نکته مهم اینه که فقط زمانی که پارامتر undefined باشه این تابع اجرا میشه. یعنی :
greet(undefined); // Hello, Guest!
greet(null); // Hello, null!
greet('');
✅ کاربرد : میتونیم مقادیر پیشفرض رو داینامیک بسازیم، مثلاً تاریخ، توکن، یا یه مقدار محاسبهای و ... .
#tip #js
💪 پروکسی! (Proxy) ابزار قدرتمند و کاربردی در جاوااسکریپت
پروکسی چیه؟
پروکسی در جاوااسکریپت یه شیء هست که با استفاده از سازنده Proxy ساخته میشه و دو تا ورودی میگیره و اجازه میده رفتار یک شیء یا تابع رو موقع دسترسی، تغییر، یا فراخوانی سفارشیسازی کنیم. مثل یه واسطه که میتونیم باهاش منطق خاصی رو به یه شیء اضافه کنیم بدون اینکه خود شیء تغییر کنه. چیزی که من خودم در اثر استفاده نکردن طولانی مدت تقریبا فراموشش کرده بودم ولی میتونه خیلی کمک کننده واقع بشه.
❗️اگه تا به حال با پروکسی کار نکرده باشید شاید توضیحات من اولش یکم براتون گنگ باشه. مشکلی نداره و من سعی میکنم با یک مثال قشنگ بفهمونم چیه. در نهایت هم سرچ فراموشتون نشه!
همونطور که میبینید پروکسی دو تا ورودی میگیره. target و handler .
تارگت چیه؟
تارگت همون چیزی هست که قراره به واسطه پروکسی زیر نظر داشته باشیمش. میتونه تابع و یا شیء باشه.
هندلر چیه؟
هندلر جاییه که پروکسی به واسطه متد هایی که داره به ما اجازه میده تارگتمون رو کنترل کنیم.
که به این متد ها traps میگن. این traps ها متدهایی هستن که وقتی یه عملیاتی روی target انجام شد، اونها رو گیر میندازه (trap = تله) و بهت اجازه میده رفتارش رو تغییر بدی.
چند تا از این traps ها و شکل کلی هندلر :
در واقع handler مشخص میکنه Proxy چطور رفتار کنه وقتی عملیاتهایی مثل get, set, delete و... روی target اتفاق میافته.
چندتا از کاربرد های پروکسی :
1- اعتبارسنجی (Validation)
2- لاگ گرفتن / دیباگ
3- حفاظت از دادهها (Access control)
4- ساخت API مجازی یا
5- پشتیبانی از دادههای داینامیک (Dynamic properties)Mock
6-و...
در پست بعدی من یک مثال از اعتبارسنجی (Validation) میزنم و از متد set در این مثال استفاده میکنم.
پروکسی چیه؟
پروکسی در جاوااسکریپت یه شیء هست که با استفاده از سازنده Proxy ساخته میشه و دو تا ورودی میگیره و اجازه میده رفتار یک شیء یا تابع رو موقع دسترسی، تغییر، یا فراخوانی سفارشیسازی کنیم. مثل یه واسطه که میتونیم باهاش منطق خاصی رو به یه شیء اضافه کنیم بدون اینکه خود شیء تغییر کنه. چیزی که من خودم در اثر استفاده نکردن طولانی مدت تقریبا فراموشش کرده بودم ولی میتونه خیلی کمک کننده واقع بشه.
❗️اگه تا به حال با پروکسی کار نکرده باشید شاید توضیحات من اولش یکم براتون گنگ باشه. مشکلی نداره و من سعی میکنم با یک مثال قشنگ بفهمونم چیه. در نهایت هم سرچ فراموشتون نشه!
const proxy = new Proxy(target, handler);
همونطور که میبینید پروکسی دو تا ورودی میگیره. target و handler .
تارگت چیه؟
تارگت همون چیزی هست که قراره به واسطه پروکسی زیر نظر داشته باشیمش. میتونه تابع و یا شیء باشه.
هندلر چیه؟
هندلر جاییه که پروکسی به واسطه متد هایی که داره به ما اجازه میده تارگتمون رو کنترل کنیم.
که به این متد ها traps میگن. این traps ها متدهایی هستن که وقتی یه عملیاتی روی target انجام شد، اونها رو گیر میندازه (trap = تله) و بهت اجازه میده رفتارش رو تغییر بدی.
چند تا از این traps ها و شکل کلی هندلر :
const handler = {
get(target, prop, receiver) {
// وقتی به پراپرتی دسترسی پیدا میکنی
},
set(target, prop, value, receiver) {
// وقتی پراپرتی تغییر میکنه
},
has(target, prop) {
// وقتی از in استفاده میکنی
},
deleteProperty(target, prop) {
// وقتی delete رو صدا میزنی
},
apply(target, thisArg, args) {
// وقتی Proxy برای تابع فراخوانی میشه
},
construct(target, args) {
// وقتی Proxy با new فراخوانی میشه
},
// و کلی متد trap دیگه...
};در واقع handler مشخص میکنه Proxy چطور رفتار کنه وقتی عملیاتهایی مثل get, set, delete و... روی target اتفاق میافته.
چندتا از کاربرد های پروکسی :
1- اعتبارسنجی (Validation)
2- لاگ گرفتن / دیباگ
3- حفاظت از دادهها (Access control)
4- ساخت API مجازی یا
5- پشتیبانی از دادههای داینامیک (Dynamic properties)Mock
6-و...
در پست بعدی من یک مثال از اعتبارسنجی (Validation) میزنم و از متد set در این مثال استفاده میکنم.
❤1
خب حالا با استفاده از Proxy میخوام نام کاربر رو اعتبار سنجی کنیم. خلاصه وظیفه کد ما اینه :
در صورتی که تعداد کاراکتر نام کاربر بیشتر از 3 بود نام کاربر آپدیت بشه. در غیر اینصورت همان نام قبلی بمونه.
پیشنهاد میکنم این کد رو خودتون یه بار بخونید و بعد در ادامه هر جایی که من به بخشی از کد اشاره کردم ، دوباره به اون بخش مراجعه کنید تا با هم پیش بریم.
خب ما در این مثال یک target داریم که آبجکت هست و آبجکت ما دارای پراپرتی name هست.
در ادامه ما proxy رو داریم که دو تا ورودی گرفته ، target , handler .
تارگت که مشخصه در این کد ما یک آبجکت هست با پراپرتی name و مقدار Ali ، اصل کار handler هست که بریم بررسیش کنیم.
ما توی handler از یک متد استفاده کردیم به نام set.
من درون این متد اومدم و نام کاربر رو چک کردم اگه تعداد کاراکترش بزرگتر از 3 بود و اسم پراپرتی ما هم name بود و همچنین تایپ value برابر با string بود نام کاربر رو تغییر بده. در غیر اینصورت نام کاربر رو آپدیت نکنه.
حالا بریم نتیجه لاگ ها رو بررسی کنیم که دقیق تر بفهمیم چطور شد.
در لاگ اول ما Ali رو دریافت کردیم ، در اینجا متد get فراخوانی میشه که چون متد get رو توی handler تعریف نکردیم، دسترسی به پراپرتی به شکل پیشفرض (بدون دخالت Proxy) انجام میشه.
سپس اومدیم گفتیم :
proxy.name = "Mohammad"
این کد متد set ما رو فراخوانی میکنه و ما درون متد set اعتبار سنجی رو انجام دادیم و name رو آپدیت کردیم.
در خط بعدی name رو لاگ گرفتیم که طبق چیزی که انتظار داشتیم Mohammad رو برگردوند چون در خط قبلی آپدیت کرده بودیم.
در خط بعدی ما تلاش کردیم که نام کاربر رو به ML تغییر بدیم با این کد :
proxy.name = 'ML';
اما نام تغییر نکرد چون ما در شرطمون داخل متد set چک کرده بودیم که تعداد کاراکتر کمتر از 3 نباشه.
❗️در مورد return هایی که درون set استفاده کردم باید بگم که این return های ما زمانی کاربرد داره که کد درون strict mode باشه. و زمانی که false برگردونیم جاوااسکریپت یک خطا (TypeError) پرتاب میکنه و تغییر رو قبول نمیکنه. در حالت عادی (غیر strict) return false عملاً تاثیر خاصی نداره و مرورگر تغییر رو نادیده میگیره.
در این مثال من صرفا از متد set استفاده کردم ، ولی همونطور که گفته بودم Proxy متد های دیگه هم داره که در پست قبلی به چندتا از مهمترین هاش اشاره کردم.
حتما پیشنهاد میکنم راجع به متد های دیگه اون هم بخونید ، واقعا کاربردی هستند.
🔗 لینک MDN :
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
#js #proxy
👨💻🔥 Dev Fuel
در صورتی که تعداد کاراکتر نام کاربر بیشتر از 3 بود نام کاربر آپدیت بشه. در غیر اینصورت همان نام قبلی بمونه.
const target = {
name: 'Ali',
};
const handler = {
set(obj, prop, value) {
if (prop === 'name' && typeof value === 'string' && value.length >= 3) {
obj[prop] = value;
return true;
}
else if (prop !== 'name') {
obj[prop] = value;
return true;
}
return false;
},
};
const proxy = new Proxy(target, handler);
console.log(proxy.name); // Ali
proxy.name = 'Mohammad';
console.log(proxy.name); // Mohammad
proxy.name = 'ML';
console.log(proxy.name); // Mohammadپیشنهاد میکنم این کد رو خودتون یه بار بخونید و بعد در ادامه هر جایی که من به بخشی از کد اشاره کردم ، دوباره به اون بخش مراجعه کنید تا با هم پیش بریم.
خب ما در این مثال یک target داریم که آبجکت هست و آبجکت ما دارای پراپرتی name هست.
در ادامه ما proxy رو داریم که دو تا ورودی گرفته ، target , handler .
تارگت که مشخصه در این کد ما یک آبجکت هست با پراپرتی name و مقدار Ali ، اصل کار handler هست که بریم بررسیش کنیم.
ما توی handler از یک متد استفاده کردیم به نام set.
من درون این متد اومدم و نام کاربر رو چک کردم اگه تعداد کاراکترش بزرگتر از 3 بود و اسم پراپرتی ما هم name بود و همچنین تایپ value برابر با string بود نام کاربر رو تغییر بده. در غیر اینصورت نام کاربر رو آپدیت نکنه.
حالا بریم نتیجه لاگ ها رو بررسی کنیم که دقیق تر بفهمیم چطور شد.
در لاگ اول ما Ali رو دریافت کردیم ، در اینجا متد get فراخوانی میشه که چون متد get رو توی handler تعریف نکردیم، دسترسی به پراپرتی به شکل پیشفرض (بدون دخالت Proxy) انجام میشه.
سپس اومدیم گفتیم :
proxy.name = "Mohammad"
این کد متد set ما رو فراخوانی میکنه و ما درون متد set اعتبار سنجی رو انجام دادیم و name رو آپدیت کردیم.
در خط بعدی name رو لاگ گرفتیم که طبق چیزی که انتظار داشتیم Mohammad رو برگردوند چون در خط قبلی آپدیت کرده بودیم.
در خط بعدی ما تلاش کردیم که نام کاربر رو به ML تغییر بدیم با این کد :
proxy.name = 'ML';
اما نام تغییر نکرد چون ما در شرطمون داخل متد set چک کرده بودیم که تعداد کاراکتر کمتر از 3 نباشه.
❗️در مورد return هایی که درون set استفاده کردم باید بگم که این return های ما زمانی کاربرد داره که کد درون strict mode باشه. و زمانی که false برگردونیم جاوااسکریپت یک خطا (TypeError) پرتاب میکنه و تغییر رو قبول نمیکنه. در حالت عادی (غیر strict) return false عملاً تاثیر خاصی نداره و مرورگر تغییر رو نادیده میگیره.
در این مثال من صرفا از متد set استفاده کردم ، ولی همونطور که گفته بودم Proxy متد های دیگه هم داره که در پست قبلی به چندتا از مهمترین هاش اشاره کردم.
حتما پیشنهاد میکنم راجع به متد های دیگه اون هم بخونید ، واقعا کاربردی هستند.
🔗 لینک MDN :
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
#js #proxy
👨💻🔥 Dev Fuel
MDN Web Docs
Proxy - JavaScript | MDN
The Proxy object enables you to create a proxy for another object, which can intercept and redefine fundamental operations for that object.
آیا میتوانیم با Next.js منطق بکاند پروژهمان را هم مدیریت کنیم؟ 🤔
خیلیها این سوال رو میپرسن که آیا Next.js فقط برای فرانتانده یا میتونیم ازش برای بکاند هم استفاده کنیم؟
بله، میتونیم! اما ...
نکستجیاس یک فریمورک React با قابلیتهای فولاستک هست، اما محدود به دنیای JavaScript/TypeScript و محیط Node.js است.
فلسفهی Next.js، سادگی در ساخت اپلیکیشنهای فولاستک بر پایه React هست، نه جایگزینی برای بکاندهای حرفهای مثل NestJS یا Express.
از قابلیتهای بکاندی Next.js میشه به این موارد اشاره کرد:
-استفاده از API Routes برای پیادهسازی سریع endpointهای ساده
-داشتن Middleware برای احراز هویت، rate-limiting و کنترل دسترسی
- امکان استفاده از Server-Side Rendering برای اجرای کدهای رندر فرانتاند در سمت سرور
-پشتیبانی از Edge Functions برای اجرای کد در نزدیکترین لوکیشن به کاربر، با تأخیر پایین
و اما محدودیتها :
دسترسی محدود به تنظیمات low-level سرور
سختتر شدن پیادهسازی معماریهای لایهلایه یا DDD
ساختار monolithic بودن، در تضاد با معماری microservices
شدیداً وابسته به React و JavaScript
کی استفاده کنیم؟
✅ پروژههای کوچک تا متوسط – مثل پنلهای ادمین یا وبسایتهای شخصی
✅ ایپیآی های ساده – عملیات CRUD معمولی
✅ تیم React-focused – وقتی تیم فقط React بلده
✅ شروع سریع – وقتی نمیخواید وقت زیادی صرف setup بکاند کنید
کی استفاده نکنیم؟
❌ سیستمهای پیچیده – با Business Logic سنگین
❌ پروژههای بزرگ – نیاز به معماری مقیاسپذیر
❌ اپلیکیشنهای ریلتایم – راهاندازی WebSocket ممکنه، ولی مناسب بار بالا نیست
❌ پردازشهای سنگین – مثل File Processing یا Data Analysis
✨ بکاند Next.js خوبه تا جایی که سادگی حفظ بشه.
اگه پروژهتون پیچیدهتره، بهتره به سمت NestJS یا Express برید.
👨💻🔥 Dev Fuel
#nextjs
خیلیها این سوال رو میپرسن که آیا Next.js فقط برای فرانتانده یا میتونیم ازش برای بکاند هم استفاده کنیم؟
بله، میتونیم! اما ...
نکستجیاس یک فریمورک React با قابلیتهای فولاستک هست، اما محدود به دنیای JavaScript/TypeScript و محیط Node.js است.
فلسفهی Next.js، سادگی در ساخت اپلیکیشنهای فولاستک بر پایه React هست، نه جایگزینی برای بکاندهای حرفهای مثل NestJS یا Express.
از قابلیتهای بکاندی Next.js میشه به این موارد اشاره کرد:
-استفاده از API Routes برای پیادهسازی سریع endpointهای ساده
-داشتن Middleware برای احراز هویت، rate-limiting و کنترل دسترسی
- امکان استفاده از Server-Side Rendering برای اجرای کدهای رندر فرانتاند در سمت سرور
-پشتیبانی از Edge Functions برای اجرای کد در نزدیکترین لوکیشن به کاربر، با تأخیر پایین
و اما محدودیتها :
دسترسی محدود به تنظیمات low-level سرور
سختتر شدن پیادهسازی معماریهای لایهلایه یا DDD
ساختار monolithic بودن، در تضاد با معماری microservices
شدیداً وابسته به React و JavaScript
کی استفاده کنیم؟
✅ پروژههای کوچک تا متوسط – مثل پنلهای ادمین یا وبسایتهای شخصی
✅ ایپیآی های ساده – عملیات CRUD معمولی
✅ تیم React-focused – وقتی تیم فقط React بلده
✅ شروع سریع – وقتی نمیخواید وقت زیادی صرف setup بکاند کنید
کی استفاده نکنیم؟
❌ سیستمهای پیچیده – با Business Logic سنگین
❌ پروژههای بزرگ – نیاز به معماری مقیاسپذیر
❌ اپلیکیشنهای ریلتایم – راهاندازی WebSocket ممکنه، ولی مناسب بار بالا نیست
❌ پردازشهای سنگین – مثل File Processing یا Data Analysis
✨ بکاند Next.js خوبه تا جایی که سادگی حفظ بشه.
اگه پروژهتون پیچیدهتره، بهتره به سمت NestJS یا Express برید.
👨💻🔥 Dev Fuel
#nextjs
Telegram
Dev Fuel
تو این چنل قراره در مورد تکنولوژی های مختلف برنامه نویسی ، خصوصا JS با هم کلی چیز یاد بگیریم.
(بیشتر حول محور بک اند).
(بیشتر حول محور بک اند).
👍1
یکی از مشکلاتی که من در تولید محتوای برنامه نویسی دارم ، راست چین بودنشونه.
چون محتواها اکثرا انگلیسی و فارسی قاطی هستند ترتیب و ظاهرش بهم میخوره. در نتیجه مجبورم اول هر خط رو حتما فارسی بزارم که ترتیب بهم نخوره پس از این بابت تعجب نکنید 😅
کسی راه حلی داره که اول خط انگلیسی باشه ولی راستچین بمونه؟
چون محتواها اکثرا انگلیسی و فارسی قاطی هستند ترتیب و ظاهرش بهم میخوره. در نتیجه مجبورم اول هر خط رو حتما فارسی بزارم که ترتیب بهم نخوره پس از این بابت تعجب نکنید 😅
کسی راه حلی داره که اول خط انگلیسی باشه ولی راستچین بمونه؟
👍4
از هوش مصنوعی برای یادگیری استفاده کنیم؟🤔
هوش مصنوعی ابزار قدرتمندیه و خیلی کارها رو راحت میکنه ، اما این راحتی خیلی هم خوب نیست! خصوصا برای یادگیری. چرا؟
1⃣ یادگیری با لقمه حاضر اتفاق نمیافته. یادگیری با تحقیق و ریسرچ ، به دنبال چیزی رفتن و فهمیدنش اتفاق میفته. وقتی مستقیما از هوش مصنوعی سوال رو میپرسیم و جواب میگیریم ، ذهن هیچوقت عمیقاً اون مفاهیم رو نمیفهمه.
2⃣ حافظه فعال غیر فعال میشه! یعنی وقتی مدام از AI استفاده کنیم ، مغز به مرور قدرت حل مسئله، حافظه و خلاقیتش رو از دست میده. مثل کسی که مدام از ماشین حساب استفاده میکنه و دیگه جمع ساده هم براش سخت میشه.
3⃣ اطلاعات ناقص و اشتباه هم زیاده. و اگه هنگام استفاده از هوش مصنوعی از صحت اطلاعاتش مطمئن نباشیم ، ممکنه مسیر رو اشتباه بریم و حتی متوجه هم نشیم مسیر اشتباهه!
4⃣ استقلال ذهنی رو تضعیف میکنه.یعنی ذهن عادت نمیکنه دنبال جواب بگرده و همیشه به دنبال کمک بیرونیه و از راه حل درونی پرهیز میکنه.
نظر شما چیه؟ به نظر شما هوش مصنوعی چه فواید و ضررهایی داشته؟
از تجربه هاتون بگید استفاده کنیم.
#ai
هوش مصنوعی ابزار قدرتمندیه و خیلی کارها رو راحت میکنه ، اما این راحتی خیلی هم خوب نیست! خصوصا برای یادگیری. چرا؟
1⃣ یادگیری با لقمه حاضر اتفاق نمیافته. یادگیری با تحقیق و ریسرچ ، به دنبال چیزی رفتن و فهمیدنش اتفاق میفته. وقتی مستقیما از هوش مصنوعی سوال رو میپرسیم و جواب میگیریم ، ذهن هیچوقت عمیقاً اون مفاهیم رو نمیفهمه.
2⃣ حافظه فعال غیر فعال میشه! یعنی وقتی مدام از AI استفاده کنیم ، مغز به مرور قدرت حل مسئله، حافظه و خلاقیتش رو از دست میده. مثل کسی که مدام از ماشین حساب استفاده میکنه و دیگه جمع ساده هم براش سخت میشه.
3⃣ اطلاعات ناقص و اشتباه هم زیاده. و اگه هنگام استفاده از هوش مصنوعی از صحت اطلاعاتش مطمئن نباشیم ، ممکنه مسیر رو اشتباه بریم و حتی متوجه هم نشیم مسیر اشتباهه!
4⃣ استقلال ذهنی رو تضعیف میکنه.یعنی ذهن عادت نمیکنه دنبال جواب بگرده و همیشه به دنبال کمک بیرونیه و از راه حل درونی پرهیز میکنه.
نظر شما چیه؟ به نظر شما هوش مصنوعی چه فواید و ضررهایی داشته؟
از تجربه هاتون بگید استفاده کنیم.
#ai
❤5
به عنوان یک شهروند ایرانی ، وظیفه من هست که این موضوع رو به اشتراک بذارم.
وضعیت آب ایران اللخصوص تهران اصلا خوب نیست 💔
طبق بررسی های انجام شده تهران تا چند هفته دیگه بیشتر آب نداره !💧
بعضی از دوستان فکر میکنند کاهش مصرف آب از طرف آنها هیچ تاثیری ندارد ، و یا در صورت کاهش مصرف به دولت کمکی کردهاند.
ولی در حال حاضر در صورتی که همین روند ادامه پیدا کنه تا چند هفته دیگه شاهد روز صفر آب خواهیم بود!
درسته که یکی از دلایل شکل گیری این فاجعه سوءمدیریت کسانی است که وظیفهشان مدیریت بوده. اما در حال حاضر باید در مصرف آب صرفه جویی کنیم تا مبادا روز صفر برسد.
اطلاعات تکمیلی رو میتوانید با یک سرچ در اینترنت پیدا کنید و یا این ویدیو رو مشاهده کنید تا متوجه عمق فاجعه بشید 💔
https://youtu.be/kcZ1AoHKhcI?si=GZRV3CIzbNP2A7aH
ممنون از همه دغدغه مندانی که به زندگی خود و دیگران ، ارزش قائلاند ❤️
وضعیت آب ایران اللخصوص تهران اصلا خوب نیست 💔
طبق بررسی های انجام شده تهران تا چند هفته دیگه بیشتر آب نداره !💧
بعضی از دوستان فکر میکنند کاهش مصرف آب از طرف آنها هیچ تاثیری ندارد ، و یا در صورت کاهش مصرف به دولت کمکی کردهاند.
ولی در حال حاضر در صورتی که همین روند ادامه پیدا کنه تا چند هفته دیگه شاهد روز صفر آب خواهیم بود!
درسته که یکی از دلایل شکل گیری این فاجعه سوءمدیریت کسانی است که وظیفهشان مدیریت بوده. اما در حال حاضر باید در مصرف آب صرفه جویی کنیم تا مبادا روز صفر برسد.
اطلاعات تکمیلی رو میتوانید با یک سرچ در اینترنت پیدا کنید و یا این ویدیو رو مشاهده کنید تا متوجه عمق فاجعه بشید 💔
https://youtu.be/kcZ1AoHKhcI?si=GZRV3CIzbNP2A7aH
ممنون از همه دغدغه مندانی که به زندگی خود و دیگران ، ارزش قائلاند ❤️
YouTube
روز صفر آب | وضعیت آخرالزمانی تنش آبی | گفتوگوی محمد فاضلی با بنفشه زهرایی
تغییر اقلیم، بارشهای کم، سیاست آبی غلط و بسیاری عوامل دیگر باعث شدهاند وضعیت تأمین آب شرب و بهداشت شهرها به حالت تنش برسد و اگر سطح مصرف کاهش نیابد، رسیدن به وضعیت آخرالزمانی #روز_صفر آب دور نیست.
دکتر #بنفشه_زهرایی استاد مدیریت منابع آب دانشگاه تهران،…
دکتر #بنفشه_زهرایی استاد مدیریت منابع آب دانشگاه تهران،…
👍4
Dev Fuel
به عنوان یک شهروند ایرانی ، وظیفه من هست که این موضوع رو به اشتراک بذارم. وضعیت آب ایران اللخصوص تهران اصلا خوب نیست 💔 طبق بررسی های انجام شده تهران تا چند هفته دیگه بیشتر آب نداره !💧 بعضی از دوستان فکر میکنند کاهش مصرف آب از طرف آنها هیچ تاثیری ندارد ،…
دوستان عزیز ، کپی از این متن هیچ مشکلی نداره و اگه خواستید میتونید کپی کنید هرجایی که خواستید بذارید.
اشتراک گذاری از طرف مردم میتونه خیلی کمک کننده باشه 🙏❤️
اشتراک گذاری از طرف مردم میتونه خیلی کمک کننده باشه 🙏❤️
👍4
وقتی ما میگیم پروژه ماژولاره یعنی چی؟🤔
ماژولار یعنی پروژه به چند بخش تقسیم شده. و هر بخش مسئولیت مشخص خودشو داره. مثلا بخش user , auth , payment و ... .
هر ماژول میتونه شامل کنترلر، سرویس، مدل، روتر، middleware خودش باشه. کد ها از هم مستقل هستند و وابستگی ها مدیریت شده است.
یه مثال از یک پروژه ای که ماژولار نیست :
در این ساختار همه چیز در دایرکتوری های مختلف پخش شده.
پروژه ماژولار :
هر ماژول به صورت مستقل و جداگانه قابل توسعه و نگهداریه.
در نگاه اول شاید با یک معماری اشتباه گرفته بشه ولی ماژولار بودن یک معماری نیست.ماژولار بودن یک ویژگی از طراحی ساختار پروژهست، ولی بهتنهایی معماری محسوب نمیشه.
معماری یعنی: کل فلسفه و ساختار اصلی سیستم، از نحوه لایهبندی گرفته تا ارتباط اجزا با هم.
و ماژولار بودن میتونه در معماری های مختلف (Clean Architecture، Onion، Hexagonal , ...) پیاده سازی بشه.
مثلا معماری پیشفرض NestJS معماریه لایهای (Layered Architecture) هست و ساختار ماژولار داره.
#architecture #modular
ماژولار یعنی پروژه به چند بخش تقسیم شده. و هر بخش مسئولیت مشخص خودشو داره. مثلا بخش user , auth , payment و ... .
هر ماژول میتونه شامل کنترلر، سرویس، مدل، روتر، middleware خودش باشه. کد ها از هم مستقل هستند و وابستگی ها مدیریت شده است.
یه مثال از یک پروژه ای که ماژولار نیست :
controllers/
userController.js
productController.js
routes/
userRoutes.js
productRoutes.js
models/
user.js
product.js
در این ساختار همه چیز در دایرکتوری های مختلف پخش شده.
پروژه ماژولار :
src/
modules/
user/
user.controller.js
user.service.js
user.routes.js
user.model.js
product/
product.controller.js
product.service.js
product.routes.js
product.model.js
هر ماژول به صورت مستقل و جداگانه قابل توسعه و نگهداریه.
در نگاه اول شاید با یک معماری اشتباه گرفته بشه ولی ماژولار بودن یک معماری نیست.ماژولار بودن یک ویژگی از طراحی ساختار پروژهست، ولی بهتنهایی معماری محسوب نمیشه.
معماری یعنی: کل فلسفه و ساختار اصلی سیستم، از نحوه لایهبندی گرفته تا ارتباط اجزا با هم.
و ماژولار بودن میتونه در معماری های مختلف (Clean Architecture، Onion، Hexagonal , ...) پیاده سازی بشه.
مثلا معماری پیشفرض NestJS معماریه لایهای (Layered Architecture) هست و ساختار ماژولار داره.
#architecture #modular
👍3❤1
تفاوت بین fs.readFileSync و fs.readFile در NodeJs چیه؟🤔
هر دو تابع از promises ماژول fs ایمپورت شدن و برای خوندن فایل هستند. اما تفاتشون توی نحوه اجرا ، و تأثیرشون روی برنامه خیلی زیاده!
یعنی این کد :
با این کد :
تفاوت زیادی داره!
بیشتر وقتها فکر میکنیم چون await استفاده کردیم، یعنی کدمون مثل fs.readFileSync عمل میکنه.
اما متد readFile یک متد asynchronous و non-blocking هست. و پشت صحنه میره داخل Thread Pool اجرا میشه ، و باعث نمیشه کل برنامه برای اجرای این کد متوقف بمونه.
اما متد readFileSync یک synchronous و blocking هست! یعنی مستقیما روی main thread اجرا میشه و کل برنامه تا خوندن فایل تموم نشه متوقف میمونه!
برای درک بهتر این موضوعا باید یکم با مفاهیمی مثل Event Loop، Thread Pool , I/O و Event Queue آشنا باشید.
اگه آشنا نیستید یا متوجه نشدید، کامل این مفاهیم رو هم توضیح میدم 💁♂️
هر دو تابع از promises ماژول fs ایمپورت شدن و برای خوندن فایل هستند. اما تفاتشون توی نحوه اجرا ، و تأثیرشون روی برنامه خیلی زیاده!
یعنی این کد :
fs.readFileSync('file.txt')با این کد :
await fs.readFile('file.txt')تفاوت زیادی داره!
بیشتر وقتها فکر میکنیم چون await استفاده کردیم، یعنی کدمون مثل fs.readFileSync عمل میکنه.
اما متد readFile یک متد asynchronous و non-blocking هست. و پشت صحنه میره داخل Thread Pool اجرا میشه ، و باعث نمیشه کل برنامه برای اجرای این کد متوقف بمونه.
اما متد readFileSync یک synchronous و blocking هست! یعنی مستقیما روی main thread اجرا میشه و کل برنامه تا خوندن فایل تموم نشه متوقف میمونه!
برای درک بهتر این موضوعا باید یکم با مفاهیمی مثل Event Loop، Thread Pool , I/O و Event Queue آشنا باشید.
اگه آشنا نیستید یا متوجه نشدید، کامل این مفاهیم رو هم توضیح میدم 💁♂️
👍1
تا الان اسم بان (Bun) رو شنیده بودم ولی تا حالا باهاش کار نکرده بودم.
تو این پست میخوام درباره تجربه استفاده خودم از بان بگم.
اول از همه بان چیه؟🤔
بان یک JavaScript runtime مثل Node.js هست که سرعت خیلی بالایی داره.
من برای شروع، یه API ساده با Elysia نوشتم.(Elysia یه فریمورک سبک و ultra-fast برای Bun هستش).
و واقعاً نتیجهش خیرهکننده بود!
سرعت اجرای کد خیلی بالا بود، و در حالت development وقتی تغییری میدادم، تو کسری از ثانیه ران میشد.
توی همین روند یه کم هم با Hono کار کردم. اونم فریمورک خیلی سبکیه که روی پلتفرمهای مختلف مثل Cloudflare Workers, Fastly Compute, Deno, Bun و ... کار میکنه.
Hono هم عملکرد خیلی خوبی داشت، من روی Bun تست گرفتم و نتیجه اون هم خیره کننده بود.
در کل تجربهی اولم با Bun خیلی مثبت بود و واقعاً به آیندهش امیدوار شدم.
پیشنهاد میکنم شما هم حتما امتحانش کنید و نظر خودتون رو بگید.
در ادامه ، پست بعدی از نتایج بنچ مارک ها رو میذارم تا تفاوت ها رو ببینید.
تو این پست میخوام درباره تجربه استفاده خودم از بان بگم.
اول از همه بان چیه؟🤔
بان یک JavaScript runtime مثل Node.js هست که سرعت خیلی بالایی داره.
من برای شروع، یه API ساده با Elysia نوشتم.(Elysia یه فریمورک سبک و ultra-fast برای Bun هستش).
و واقعاً نتیجهش خیرهکننده بود!
سرعت اجرای کد خیلی بالا بود، و در حالت development وقتی تغییری میدادم، تو کسری از ثانیه ران میشد.
توی همین روند یه کم هم با Hono کار کردم. اونم فریمورک خیلی سبکیه که روی پلتفرمهای مختلف مثل Cloudflare Workers, Fastly Compute, Deno, Bun و ... کار میکنه.
Hono هم عملکرد خیلی خوبی داشت، من روی Bun تست گرفتم و نتیجه اون هم خیره کننده بود.
در کل تجربهی اولم با Bun خیلی مثبت بود و واقعاً به آیندهش امیدوار شدم.
پیشنهاد میکنم شما هم حتما امتحانش کنید و نظر خودتون رو بگید.
در ادامه ، پست بعدی از نتایج بنچ مارک ها رو میذارم تا تفاوت ها رو ببینید.
❤1
عکس اول مقایسه سرعت بان با سایر تکنولوژی ها بر واحد Request Per Second هست.
طبق این مقایسه ، بان 2 برابر سریع تر از NodeJs ( با فریمورک Fastify ) ، و حتی با Go هم تقریبا برابری میکنه.
عکس دوم هم مقایسه فریمورک های Js هست. ElysiaJs بر پایه ران تایم Bun تقریبا 18 برابر سریع تر از اکسپرس بر پایه ران تایم NodeJs هست!
منبع :
https://dev.to/jthanh8144/frameworks-of-bunjs-elysiajs-and-hono-4all
طبق این مقایسه ، بان 2 برابر سریع تر از NodeJs ( با فریمورک Fastify ) ، و حتی با Go هم تقریبا برابری میکنه.
عکس دوم هم مقایسه فریمورک های Js هست. ElysiaJs بر پایه ران تایم Bun تقریبا 18 برابر سریع تر از اکسپرس بر پایه ران تایم NodeJs هست!
منبع :
https://dev.to/jthanh8144/frameworks-of-bunjs-elysiajs-and-hono-4all
❤2
نصفه شبی یه موضوع به ذهنم زد راجع بهش تحقیق کنم!
درباره اینکه برنامه نویس ها چطور آدم هایی هستند؟ افراد برنامه نویس ، گیک توی تکنولوژی و ... واقعا چطور عمل میکنن؟
آیا همه این افراد همیشه از خلق کردن لذت میبرن؟ اینکار همیشه براشون لذت بخشه؟
آیا واقعا اینطوریه که توی فیلما نشون میدن؟ یه هودی میپوشی یه کافی میزنی بر بدن و میری 24 ساعته میچسبی به سیستم؟
دارم راجع بهش تحقیق میکنم و به امید خدا فردا یه پست راجع بهش میذارم. راستی نظر شما چیه؟ خود شما چه حسی نسبت به این کار دارید و دیدتون نسبت به کار چطوریه؟
❗️نظر و تجربیات شما در کامنت برامون ارزشمنده ، بهره میبریم و در پست بعدی استفاده میشه.
درباره اینکه برنامه نویس ها چطور آدم هایی هستند؟ افراد برنامه نویس ، گیک توی تکنولوژی و ... واقعا چطور عمل میکنن؟
آیا همه این افراد همیشه از خلق کردن لذت میبرن؟ اینکار همیشه براشون لذت بخشه؟
آیا واقعا اینطوریه که توی فیلما نشون میدن؟ یه هودی میپوشی یه کافی میزنی بر بدن و میری 24 ساعته میچسبی به سیستم؟
دارم راجع بهش تحقیق میکنم و به امید خدا فردا یه پست راجع بهش میذارم. راستی نظر شما چیه؟ خود شما چه حسی نسبت به این کار دارید و دیدتون نسبت به کار چطوریه؟
❗️نظر و تجربیات شما در کامنت برامون ارزشمنده ، بهره میبریم و در پست بعدی استفاده میشه.
👍5😁1
یه بار داشتم تو سیستم کد میزدم ، پسر خاله 9 ساله ام پرسید چیکار داری میکنی؟
گفتم هیچی ، دارم کار میکنم.
یکم شلوغ کاری کرد، به شوخی تهدیدش کردم گفتم اگه بیشتر از این شلوغ کنی گوشی باباتو هک میکنم.
برگشت یه نگاه خردمندانه کرد و گفت :
هه ، تو فقط یه برنامه نویسی هکر نیستی که هک کنی 😶
خواستم بگم یه بچه 9 ساله فرق برنامه نویس و هکر رو فهمید ، خیلی ها هنوز نفهمیدن 😂
پ.ن:روی صحبتم با اوناییه که تا میبینن یکی برنامه نویسه میگن : پیج فلان یارو رو برام هک میکنی؟🤦♂
گفتم هیچی ، دارم کار میکنم.
یکم شلوغ کاری کرد، به شوخی تهدیدش کردم گفتم اگه بیشتر از این شلوغ کنی گوشی باباتو هک میکنم.
برگشت یه نگاه خردمندانه کرد و گفت :
هه ، تو فقط یه برنامه نویسی هکر نیستی که هک کنی 😶
خواستم بگم یه بچه 9 ساله فرق برنامه نویس و هکر رو فهمید ، خیلی ها هنوز نفهمیدن 😂
پ.ن:روی صحبتم با اوناییه که تا میبینن یکی برنامه نویسه میگن : پیج فلان یارو رو برام هک میکنی؟🤦♂
👍5❤1
🧩 برنامهنویسی، ساخت چیزهای جدید، گیک بودن و سر و کله زدن با کلی تکنولوژی آیا همیشه لذت بخشه؟
آیا اصل داستان همون چیزیه که توی فیلما نشون میدن؟ یه هودی میپوشی یه کافی هم میزنی بر بدن و 24 ساعت توی سیستم؟(البته که شدنیه فقط توی اون کافی یه چیز باید بندازی)
چند روز پیش، یه تسک داشتم که نه سخت بود و نه چالشبرانگیز. ولی واقعاً حوصلهشو نداشتم.فقط میخواستم سیستمو خاموش کنم و بخوابم.
توی اون لحظه یه سوالی برام پیش اومد . اینکه برنامه نویس های دیگه هم دچار این حس میشن؟ اگه آره در اون لحظه چیکار میکنن؟
رفتم تحقیق کردم.
واقعیت اینه که برنامهنویسی همیشه اون تصویری که تو ذهن داریم نیست.
این مسیر همیشه پر از هیجان، لذت، و حس ساختن نیست.کلا نه تنها این کار ، بلکه در همه حرفه ها همینطوره.
خیلی از برنامهنویسهای معروف و حرفهای دنیا هم دقیقاً همین حس رو داشتن.
چند تا مثال از افراد معروف این حوزه پیدا کردم : ( مثال ها با هوش مصنوعی پیدا شده اند )
👤 Dan Abramov (عضو تیم React – سازنده Redux)
گاهی فقط میخوام لپتاپمو ببندم و دیگه هیچوقت برنگردم به برنامهنویسی. مخصوصاً وقتی حس میکنم هیچ چیزو درست نمیفهمم.
👤 Kent C. Dodds (مدرس React و از چهرههای معروف انجمن JS)
وقتی بچهدار شدم، یه مدت واقعاً علاقهای به برنامهنویسی نداشتم. حس میکردم شاید دیگه هیچوقت نتونم برگردم بهش.
👤 John Carmack (خالق Doom و Quake)
بخش زیادی از زندگیمو با اشتیاق برای کدنویسی گذروندم، ولی گاهی دچار خستگی و تکرار شدم. اون موقعها انگیزهمو از دست میدادم.
خب حالا راهکار چیه؟ در این مدت چه کار هایی کنیم خوبه؟🤔
واقعیت اینه که هیچ راهکار مشخص و قطعی وجود نداره برای هر کسی ممکنه متفاوت باشه.
اما یک سری راهکار های کلی هستند که در این موقعیت میتونن کمک کنند :
1⃣ استراحت آگاهانه: گاهی مغز خسته است و یه استراحت کوتاه میتونه کمک کننده باشه.(بی هدف در سوشال مدیا گشتن استراحت نیست)
2⃣ یادآوری هدفها: به خودت یادآوری کن چرا شروع کردی. حتی نوشتن یا مرورش میتونه شوق اولیه رو زنده کنه.
3⃣ انجام کارهای کوچک و فوری: یه تسک ساده رو کامل کن. حتی یه قدم کوچیک باعث میشه دوباره به حرکت بیفتی.
4⃣ صحبت با آدمهای هممسیر: گپ با کسی که شرایط مشابهی داشته باعث میشه بفهمی تنها نیستی و این حس طبیعیه
آیا اصل داستان همون چیزیه که توی فیلما نشون میدن؟ یه هودی میپوشی یه کافی هم میزنی بر بدن و 24 ساعت توی سیستم؟(البته که شدنیه فقط توی اون کافی یه چیز باید بندازی)
چند روز پیش، یه تسک داشتم که نه سخت بود و نه چالشبرانگیز. ولی واقعاً حوصلهشو نداشتم.فقط میخواستم سیستمو خاموش کنم و بخوابم.
توی اون لحظه یه سوالی برام پیش اومد . اینکه برنامه نویس های دیگه هم دچار این حس میشن؟ اگه آره در اون لحظه چیکار میکنن؟
رفتم تحقیق کردم.
واقعیت اینه که برنامهنویسی همیشه اون تصویری که تو ذهن داریم نیست.
این مسیر همیشه پر از هیجان، لذت، و حس ساختن نیست.کلا نه تنها این کار ، بلکه در همه حرفه ها همینطوره.
خیلی از برنامهنویسهای معروف و حرفهای دنیا هم دقیقاً همین حس رو داشتن.
چند تا مثال از افراد معروف این حوزه پیدا کردم : ( مثال ها با هوش مصنوعی پیدا شده اند )
👤 Dan Abramov (عضو تیم React – سازنده Redux)
گاهی فقط میخوام لپتاپمو ببندم و دیگه هیچوقت برنگردم به برنامهنویسی. مخصوصاً وقتی حس میکنم هیچ چیزو درست نمیفهمم.
👤 Kent C. Dodds (مدرس React و از چهرههای معروف انجمن JS)
وقتی بچهدار شدم، یه مدت واقعاً علاقهای به برنامهنویسی نداشتم. حس میکردم شاید دیگه هیچوقت نتونم برگردم بهش.
👤 John Carmack (خالق Doom و Quake)
بخش زیادی از زندگیمو با اشتیاق برای کدنویسی گذروندم، ولی گاهی دچار خستگی و تکرار شدم. اون موقعها انگیزهمو از دست میدادم.
خب حالا راهکار چیه؟ در این مدت چه کار هایی کنیم خوبه؟🤔
واقعیت اینه که هیچ راهکار مشخص و قطعی وجود نداره برای هر کسی ممکنه متفاوت باشه.
اما یک سری راهکار های کلی هستند که در این موقعیت میتونن کمک کنند :
1⃣ استراحت آگاهانه: گاهی مغز خسته است و یه استراحت کوتاه میتونه کمک کننده باشه.(بی هدف در سوشال مدیا گشتن استراحت نیست)
2⃣ یادآوری هدفها: به خودت یادآوری کن چرا شروع کردی. حتی نوشتن یا مرورش میتونه شوق اولیه رو زنده کنه.
3⃣ انجام کارهای کوچک و فوری: یه تسک ساده رو کامل کن. حتی یه قدم کوچیک باعث میشه دوباره به حرکت بیفتی.
4⃣ صحبت با آدمهای هممسیر: گپ با کسی که شرایط مشابهی داشته باعث میشه بفهمی تنها نیستی و این حس طبیعیه
❤3🆒2👍1
شما هم مثل من فکر میکردین معماری نرم افزار ، فقط در همین حد خلاصه میشد که میگفتیم برنامه Microservice, Layered یا ... است؟
پست بعدی درباره این که معماری نرم افزار فقط در همین حد خلاصه نمیشه صبحت میکنیم ، و قراره تعریف دقیق تری ازش داشته باشیم.
پست بعدی درباره این که معماری نرم افزار فقط در همین حد خلاصه نمیشه صبحت میکنیم ، و قراره تعریف دقیق تری ازش داشته باشیم.
معماری نرم افزار یعنی چی؟
مثلا اگه شخصی بپرسه معماری که در این برنامه پیاده سازی کردی چیه ، احتمالا بگیم که مثلا معماری این برنامه Microservice , Layered یا ... است. اما در معماری نرم افزار اینها فقط ساختار هستند!
پس معماری نرم افزار دقیقا یعنی چی؟
معماری نرمافزار یک هدف دائماً در حال حرکت (تغییرپذیر) است، چون اکوسیستم توسعهی نرمافزار بهسرعت در حال تحول است.
ماهیت معماری نرم افزار به قدری پویاست که حتی ممکنه تعریف خودش هم تغییر کنه!
برخلاف تصور سنتی که معماری رو یه تصمیمگیری اولیه و تغییرناپذیر میدونه، معماری مدرن باید انعطافپذیر، قابل تغییر و پویا باشه. سبکهایی مثل میکروسرویسها این نگاه رو عملی کردند. پس معمارها باید دائماً خودشون و تصمیماتشون رو با تغییرات دنیای نرمافزار بهروز کنن.
حالا که میدونیم معماری برابر با ساختار نیست و همچنین بسیار پویاست ، میتونیم تعریف بهتری ازش داشته باشیم.
معماری = ساختار + تصمیمات + ویژگیها + اصول طراحی
یعنی معماری شامل اینهاست:
1-ساختار سیستم (Structure): مثل Microservices یا Layered
2-ویژگیهای معماری (Architectural Characteristics): مثل مقیاسپذیری، در دسترس بودن، امنیت، کارایی و ...
3-تصمیمات معماری (Architecture Decisions): مثلاً چرا فلان تکنولوژی انتخاب شده؟ چرا از این سبک استفاده شده؟ چرا فلان ویژگی مهمتر از اون یکیه؟
4-اصول طراحی (Design Principles): مثل Loose Coupling، High Cohesion، Separation of Concerns و ...
هر کدام از موارد اشاره شده توضیحات مفصل خودشون رو دارند و برای درک بهتر هر کدوم میتونید سرچ کنید.
برگرفته از کتاب Fundamentals of Software Architecture
#architecture
مثلا اگه شخصی بپرسه معماری که در این برنامه پیاده سازی کردی چیه ، احتمالا بگیم که مثلا معماری این برنامه Microservice , Layered یا ... است. اما در معماری نرم افزار اینها فقط ساختار هستند!
پس معماری نرم افزار دقیقا یعنی چی؟
معماری نرمافزار یک هدف دائماً در حال حرکت (تغییرپذیر) است، چون اکوسیستم توسعهی نرمافزار بهسرعت در حال تحول است.
ماهیت معماری نرم افزار به قدری پویاست که حتی ممکنه تعریف خودش هم تغییر کنه!
برخلاف تصور سنتی که معماری رو یه تصمیمگیری اولیه و تغییرناپذیر میدونه، معماری مدرن باید انعطافپذیر، قابل تغییر و پویا باشه. سبکهایی مثل میکروسرویسها این نگاه رو عملی کردند. پس معمارها باید دائماً خودشون و تصمیماتشون رو با تغییرات دنیای نرمافزار بهروز کنن.
حالا که میدونیم معماری برابر با ساختار نیست و همچنین بسیار پویاست ، میتونیم تعریف بهتری ازش داشته باشیم.
معماری = ساختار + تصمیمات + ویژگیها + اصول طراحی
یعنی معماری شامل اینهاست:
1-ساختار سیستم (Structure): مثل Microservices یا Layered
2-ویژگیهای معماری (Architectural Characteristics): مثل مقیاسپذیری، در دسترس بودن، امنیت، کارایی و ...
3-تصمیمات معماری (Architecture Decisions): مثلاً چرا فلان تکنولوژی انتخاب شده؟ چرا از این سبک استفاده شده؟ چرا فلان ویژگی مهمتر از اون یکیه؟
4-اصول طراحی (Design Principles): مثل Loose Coupling، High Cohesion، Separation of Concerns و ...
هر کدام از موارد اشاره شده توضیحات مفصل خودشون رو دارند و برای درک بهتر هر کدوم میتونید سرچ کنید.
برگرفته از کتاب Fundamentals of Software Architecture
#architecture
🔥3