به قولی بس بگردید و بگردد روزگار، دل به هیچی در نبندد هوشیار! (حالا با اندکی تلخیص).
من یه پروژهی نه چندان کوچولو برای خودم تعریف کردم و امیدوارم بتونم از پسش بربیام. مطمئنا اگه بتونم وقت مناسبی روی این پروژهم بذارم، میتونم از آب و گل درش بیارم. حالا موضوع چیه؟ موضوع اینه که میخوام یه نرمافزار برای مدیریت کارها و مستنداتم بنویسم. فعلا برای این کار از Google Keep استفاده میکنم. وجدانا هم خوب، ساده و کار راه اندازه. به خصوص که متنها و تصاویری که توش ذخیره میکنم به صورت آفلاین هم در دسترسم هستن و این وقتی تو سالن تولید هستم و اکثر اوقات دسترسی به اینترنت ندارم خیلی به کارم میاد. در هر صورت، من چندتا امکان اضافی نیاز دارم که متاسفانه Google Keep هنوز اونها رو نداره. پس میخوام دست به کار بشم و اپلیکیشن خودم رو بنویسم.
خوب، بریم سراغ اصل مطلب! من برای شروع کردن این پروژه سه تا انتخاب داشتم که باید بهشون رسیدگی میکردم:
- انتخاب فریمورک سمت کاربر، بین React.js و Vue.js دو به شک بودم، که سرانجام React رو انتخاب کردم. به نظرم React وقتی مجهز به Redux میشه خیلی خوب و قدرتمند ظاهر میشه.
- انتخاب فریمورک سمت سرور، که بعد از اندکی هزینه و فایده، به انتخاب AdonisJS راضی شدم.
- انتخاب پایگاه داده، که برای این پروژه PostgreSQL رو انتخاب کردم (بله، میدونم درستش اینه که بگم سیستم مدیریت پایگاه داده یا به قول فرنگیها DBMS، ولی تو این نوشته برای راحتی به اختصار میگم پایگاه داده).
تو این نوشته میخوام درمورد دلایلم برای انتخاب فریمورک سمت سرور، و یخورده هم درمورد دلایل انتخاب پایگاه داده بنویسم.
خوب آمیرزا، چرا AdonisJS رو انتخاب کردی؟
قبل از هر چیزی بگم که من آدونیس زیبا و دوستداشتنی رو برای این پروژه انتخاب کردم، اما برای همهی پروژههام ازش استفاده نمیکنم. فیالمثل برای پروژهی قبلیم که خوندن دو تا شفت انکودر و نمایش اطاعات اونها توی یه کامپیوتر بود از KoaJS استفاده کردم. چون پروژهی کوچیکی بود و میخواستم تا جایی که امکان داره سبک، ساده و انعطافپذیر باشه. پس هرچی که تو این نوشته میخوام بگم الزاما به این معنی نیست که تو هر شرایطی همین تصمیمات رو میگیرم!
حالا بریم سراغ دلیلهام:
اول، من با لاراول دوستی دیرینهای دارم و کم و بیش خاطر خواهش هستم. من کارهای جدی قبلیم رو با لاراول انجام دادم، برای همین برای یه کار جدی جدید آدونیس خیلی میتونه برام راحت باشه. چون آدونیس کپی برابر اصله لاراوله و هیچ فرقی باهاش نداره! اصلا شما بهش بگو LaravelJS! هرچی که اونجا داشتیم اینجا هم داریم! پس برای مهاجرت به NodeJS آدونیس یه شروع خوب برام محسوب میشه.
دوم، من فعلا وقت ندارم برای این پروژهم همه چی رو از صفر استارت بزنم. یعنی لازم دارم که خیلی زود این پروژهم رو راه بندازم. آدونیس رو میشه خیلی زود راه انداخت و به قولی Zero Configuration هست. مثلا اگه قرار بود پروژه رو با KoaJS انجام بدم باید یه Router انتخاب میکردم، یه کتابخونه برای ارتباط با پایگاه داده انتخاب میکردم، یه کتابخونه برای تاریخ، یه کتابخونه برای ایمیل، یه کتابخونه برای Authentication و کلی کتابخونهی دیگه که باید تک تک انتخابشون میکردم.
سوم، من برای این پروژه حوصله ندارم که خودم رو اسیر چند ده تا کتابخونهی مختلف کنم! مدیریت کتابخونههای مختلف تو جاوااسکریپت خیلی ساده نیست، چون هی به هی و زود به زود به روز میشن و همیشه باید حواسمون بهشون باشه! پس برای یه این پروژهم برای بیشتر کارها نیاز به کتابخونههایی دارم که خود فریمورک جمع و جورشون کرده باشه یه جا تا برای کارهای عادی نیازی به گشتن و پیدا کردن کتابخونههای مختلف نداشته باشم. به نظرم کارم اینطوری تمیزتر و راحتتر میشه. و البته میدونم که نکتهی سه همون نکتهی دو بود 😀
چهارم، من Migration رو دوست دارم! البته منظورم Migrationهای مربوط به پایگاه داده هست. Migrationها باعث میشن که روند تغییرات پایگاه داده تو دستم باشه و راحت بتونم تغییرات رو اعمال کنم و درصورت نیاز هم لغوشون کنم و برگردم به حالات قبلی. ازونجایی که آدونیس مثل لاراوله، یه سیستم تر و تمیز هم برای مدیریت Migrationها داره. البته ناگفته نمونه که آدونیس برای این کار از Knex.js استفاده میکنه، اگه دوست دارین میتونید اون رو به طور جداگانه هم تو پروژهتون استفاده کنید.
پنجم، خط فرمانی که آدونیس داره تو انجام خیلی از کارها به کارم میاد و کمکم میکنه. تو لاراول علاوه بر artisan خط فرمان tinker رو هم داشتیم، تو آدونیس یه چیز شبیه اون داریم، به جای artisan داریم ace و یه جای tinker تقریبا میتونیم از repl استفاده کنیم.
حالا میرسیم به این که چرا Postgresql رو انتخاب کردم. حقیقتش تو پایگاه دادههای اپن سورس Postgres خیلی خوب و سریعه. من برای این کارم نیاز به یه پایگاه داده با سرعت خوب داشتم، یک سری داده آماده کردم برای تست کردن پایگاه دادههای مختلف و بیتعارف سرعت Postgres من رو شگفتزده کرد. به خاطر همین سرعت زیادش ترجیح دادم که از Postgres استفاده کنم. تو این پروژهم قصد استفاده از NoSQLها رو ندارم، گرچه RethinkDB رو خیلی دوست دارم. به قولی RethinkDB گرامیست، اما حقیقت گرامیتر است 😉
شما هم اگه نظری دارید خوشحال میشم بشنوم.
قربان شما،
آمیرزا
سلام
انتخاب خوب و خردمندهای هست.
حالا انگولار یک رو انتخاب کردی یا انگولار دو ؟
چرا از دیکاس برای بخش نظرات استفاده نمیکنی تا آدم بتونه کامنت قبلیشو ویرایش کنه 🙂
الان من چجوری خرمندهای رو به خردمندانهای بود تغییر بدم ؟! 🙁
هیچکدوم … من React رو انتخاب کردم 😀
در مورد دیسکاس، هنوز حس خوبی بهش ندارم، چون گاهی موقع لود شدن بازی درمیاره .. البته فکر کنم به خاطر اینه که تو ایرانیم! .. ولی بالاخره یه روزی باید برم سراغش احتمالا …
پس عنوان چرا اینه ؟
تا چند ماه پیش فیلتر بود که خدا رو شکر رفع شد. الان هم بدون هیچ مشکلی باز میشه.
+ مزیت React نسبت به انگولار چیه ؟
خوب تو عنوان گفتم Adonis نگفتم Angular … تو نوشته هم درمورد آدونیس صحبت کردم نه انگولار 😀
درمورد دیسکاس درست میگی… الان دیگه بدون مشکل لود میشه .. ولی همیشه ترس این وجود داره که دوباره فیلتر بشه. اگه یه مدتی پایدار بود میشه سوئیچ کرد روش.
البته نمیگم React کلا از Angular بهتره، ولی برای من React از Angular مناسبتره.. دلایلم رو هم قبلا تو وبلاگم نوشتم، لینکش اینه:
چرا من React.js رو انتخاب کردم؟
سلام
بسیار خوب و رون گفتین.
با توجه به اینکه شما دنبال فرم ورکی بودین که جمع و جور باشه و ابزارهای لازم رو هم داشته باشه.
چرا express رو انتخاب نکردین که ماژول های خیلی بیشتری داره و چه بسا که سرعت توسعه شما رو هم افزایش بده به دلیل ابزارهای زیادی که براش نوشته شده؟
در مورد دیسکاس که تو نظرات بود. به نظرم حداقل تو ایران خوب نیست. خیلی از اوقات لود نمیشه. همین الانم مشکل داره.
ممنون از نظرت حمید جان،
یکی از اصلی دلایلی که سراغ express نرفتم این بود که هنوز به صورت پیشفرض توش از generatorها استفاده نمیشه. من چون از PHP و پایتان اومد تو دنیای جاوااسکریپت، هنوز خیلی از جاها با برنامهنویسی Async راحت نیستم، مخصوصا بعضی جاها که callbackها تو هم میپیچن و به قولی callback hell درست میشه.
دلایل دیگهم رو هم که تو نوشته گفتم 😀
درمورد دیسکاس درست میگی، ولی کم کم استفاده از دیسکاس داره عمومی میشه. من هم منتظرم تا حجت بر من تمام بشه 😀
منم دقیقا دنبال این جواب هستم چون خودم php کد میزدم و اومدم سمت js و اینکه شما این فرم ورک رو انتخاب کدرین برام سوال بود.
با توجه به اینکه ابزار ها express خیلی بیشتر از adonisjs خواهد بود. به مشکل بر نمیخورین؟ خیلی از ابزارها رو expressjs داره که قابل مقایسه با adonisjs نیست.
تشکر از انتقال تجربیاتتون
با توجه به نیازهای فعلی من، آدونیس برام بهتر از اکسپرسه 😀
البته ناگفته نمونه، مواقعی که از آدونیس استفاده نمیکنم معمولا از Koa.js استفاده میکنم، کلا زیاد سراغ express نرفتم.
همیشه از مقاله هات لذت بردم آمیرزا همینطور پرقدرت ادامه بده
قربان تو مجتبی جان، همیشه لطف داری. 😀
ممنون از مقاله خوب و مفیدتون ، واقعا استفاده کردم.
منم مثله شما از لاراول استفاده میکردم و الان میخوام از امکانات Node استفاده کنم اما هنوز تو انتخاب بهترین گزینه موندم !
من میخوام یه شبکه اجتماعی ( بیشتر کارکردش با موبایل هستش ) استفاده کنم و میخوام یک وبسرویس API برای استفاده در اندروید و … آماده کنم اما نمیدونم بهترین گزینه چیه !
چیزی که هم سرعت خوبی داشته باشه ، هم کاربردی باشه و هم توسعه پذیری بالا
حتی رو زبانهای دیگه هم فکر کردم !
پیشنهادی دارید برای همچین گزینه ای ؟
ممکنه تعداد کاربران خیلی زیاد بشه ( در حد بین المللی قراره فعالیت کنه ) ، برای این مورد میشه از اینجور زبانها استفاده کرد ؟
حقیقتش الان تو طوفان زبانها و فریمورکها هستیم .. خیلی هم پویا شدن و سریع تغییر میکنن. برای انتخاب کردن کلا سخت شده.
در هر صورت، لاراول راحتی و توسعهپذیری خوبی داره، مخصوصا نسخه جدیدش که API و تصدیق هویت مبتنی بر اون و امکاناتی از این قبیل رو هم اضافه کرده. اما عوضش سنگینه نسبتا!
فریمورکهای مبتنی بر Node سبک ترن .. ولی گاهی دنگ و فنگشون بیشتره ..
برا همین برای انتخاب کردن باید یه سبک سنگین بین اهدافت انجام بدی.
حتی درمورد پایگاه داده هم همینطوره .. من به شخصه حتی وقتی با Node کار جدی انجام میدم ترجیح میدم که از PostgreSQL استفاده کنم و سراغ NoSQLها نرم. البته با توجه به نیازهام این حرف رو میزنم، نه نیازهای شما 😀
ممنون از راهنمایی شما ولی بازم متوجه نشدم کدوم رو انتخاب کنم هرچند شروع کردم به کار با آدونیس ( بخاطر سینتکس آشناش )
راستی ، میتونم یکی دوتا سوال کوچیک بپرسم ازتون در مورد آدونیس؟
۱ – میخوام یه فایل هلپر بسازم که درونش فانکشن های مورد نیازم رو بزارم و بصورت گلوبال همه جای پروژه در دسترس باشه ، چطور میشه این کارو کرد ؟
۲ – آدونیس خیلی شبیهه لاراول هستش منتهی من برای نمایش صفحه بندی ( درون ویو ul > li > a ) مجبور شدم دستی بنویسم ، خودش چیزی شبیه لاراول نداره ( مثلا : $users->render() ) که درون لاراول شماره صفحات رو برمیگردوند ؟
اول جواب سوال دومت رو بدم: حقیقتش دقیق نمیدونم! ولی با تجربهای که تا اینجا از آدونیس داشتم میتونم بگم که خیلی از امکانات لاراول رو نداره. متاسفانه.
در جواب سوال اولت، باید بگم دقیقا نمیدونم، ولی منطقا باید راهی براش وجود داشته باشه.
ممنون از راهنماییت آمیرزا جان 🙂
متاسفانه یا خوشبختانه دوباره رفتم سمت لاراول 😐
نمیتونم با این Node دوست باشم :((
از یه طرف به یه سری امکانات نیاز دارم که بتونم API بنویسم و از طرف دیگه اعتماد کافی رو به Node ندارم ( هم به خودم و هم به اون ) که کلا سوئیچ کنم روش
تصمیم گرفتم نسخه ی اولیه رو با لاراول بنویسم بعد اگر گسترش پیدا کرد ، برم سمت Node و ازش استفاده کنم.
بسیار هم عالی …
گرچه گاهی سوئیچ کردن کارِ حضرت فیله!
ای دوست
چرا لوگوی این فریم ورک و شرکت ای نتورک بسیار شبیه به هم هست ؟
کدام اسکی رونده هست ؟
سلام مراحل نصب و اجراي آدونيس روي سرور هم ميشه توضيح بدين استاد
سلام. به مستندات این فریمورک مراجعه کنید.