10 پرسش و پاسخ انگولار

10 پرسش و پاسخ انگولار

تخمین مدت زمان مطالعه : 10 دقیقه
  • سطح مقاله : مقدماتی
  • نویسنده : پوریا منتخب

خب قطعا این مقاله از من نیست و مروری بر نوشته آقای جان پاپا ، نویسنده و برنامه نویس معروف در سایت Pluralsight هست که براتون آماده کردم  .

کدام یک برنده این جنگ هستند ، Angular ؟ React و یا Vue  ؟

این یک جنگ نیست بلکه یک انتخاب است . Angular , React , Vue  و Svelte ( که یه عضو جدیدتر  نسبت به سایر رقباست) همگی برای حل مشکلات مختلف طراحی شده اند و خیلی از این گزینه ها به سبک و شیوه توسعه برنامه نویس بستگی دارند . انگولار اغلب شما را به یک مسیر از پیش تعیین شده هدایت می کند در حالیکه React  حس کنجکاوی و ماجراجویی را در شما ایجاد می کند . در مورد Angular عقیده های بسیاری وجود دارد در حالیکه برای React  این میزان کمتر و برای Vue  نیز در حد وسط قرار دارد . برای مثال زمانی که از یک پروژه انگولار به یک پروژه انگولاری دیگری سوئیچ می کردم متوجه شباهت های زیاد آنها می شدم . این برای توسعه دهندگان انگولار خیلی ساده تر است که بدون نیاز به داشتن مفهوم خاصی بین پروژه های مختلف انگولاری سوئیچ کنند اما در React  دیده ام که توسعه دهندگان مجبورند ، مواردی را به طور خاص یاد بگیرند . به طور مثال یک پروژه ری اکتی ممکن است از روتر متفاوتی استفاده کند یا چیزی کاملا متفاوت پیاده سازی کرده باشد .

چرا به نظر می رسد این روز ها تعداد پروژه های React بیشتر از Angular است ؟ 

همه این موارد بستگی به این دارد که شما در حال جستجو در چه مکانی هستید .  درشبکه های اجتماعی در مورد این و آن فریمورک بسیار شنیده اید و افرادی را مشاهده می کنید که قصد دارند از جدیدترین و جالب ترین موارد استفاده کنند و در مورد آن صحبت می کنند .فقط به این دلیل که ممکن است React  جدیدتر از Angular  باشد به این معنی نیست که لزوما بیشتر هم استفاده می شود ، به خصوص در شرکت های بزرگ . به طور مثال آنچه در شبکه های عمومی مشاهده کردم با آنچه در کار با شرکت های بزرگ دیده ام بسیار متفاوت بوده است ، که انگولار به وفور استفاده شده است .

در مقایسه با React , Vue  و Svelte ، فایل های نهایی تولید شده توسط انگولار بزرگتر به نظر می رسد . بهترین روش ها برای بهینه سازی کدامند ؟ 

اولین قانون اساسی و بزرگ ، بارگذاری هر چه کمتر فایل های js  و css در مرورگر است . اگر نیاز دارید اپلیکیشن شما با سرعت بیشتری بارگذاری شود باید در ابتدا میزان محتوای رد و بدل شده در درخواست ها را کاهش دهید ، میزان محتوایی که باید توسط مرورگر تجزیه شود را کاهش دهید و بخش های ادراکی برنامه را بهبود بخشید . برای برنامه های کوچکتر ، انگولار خروجی بزرگتری دارد چون از پکیج های بیشتری استفاده می کند اما در پروژه های بزرگتر برای هر کامپوننت اضافه شده در برنامه در نهایت سربار کمتری دارید به این دلیل که بسیاری از آنها قابلیت استفاده مجدد را دارند و در نهایت دوباره و یا چندباره استفاده می شوند .

روش مد نظر شما برای ارتباط بین اجزای مختلف چیست ؟ Input Output ها ؟ Service  ها یا مواردی دیگر ؟ 

هر سه موارد . به طور مثال من از Input Output ها در برقرای ارتباط بین کامپوننت های پدر و فرزند زمانی استفاده می کنم که یک کامپوننت پدر باشد و یک کامپوننت فرزند . اگر ارتباط بین یک کامپوننت والد و فرزند آن به همین شکل باشد استفاده از این روش ساده موثر است . اما زمانی که می دانم رابطه بین کامپوننت ها وسیع تر است به طور مثال یک کامپوننت والد که خود شامل یک کامپوننت فرزند است و کامپوننت فرزند نیز شامل کامپوننت فرزند دیگری و به همین شکل به هیچ عنوان از Input Output ها برای انتقال داده بین کامپوننت ها استفاده نمی کنم. در این مورد من استفاده  از Service ها را ترجیح می دهم و اگر این روابط به طور دیوانه واری بزرگتر شود و هیچ ایده ای برای ارتباط بین اجزا در سر نداشته باشم بهترین روش جایگزین استفاده از RxJS Subject  ها هستند .

ساده ترین راه برای درک Input  ها و Output ها در انگولار چیست ؟ 

به طور مثال فرض کنید یک کامپوننت داریم برای نگهداری لیستی از مشتریان و کامپوننت دیگری به عنوان فرزند داریم برای نمایش جزییات هر مشتری . در این حالت با انتخاب هر کدارم از مشتریان از کامپوننت لیست مشتریان باید Id مربوط به آن مشتری به کامپوننت فرزند داده شود تا جزییات مربوط به همان مشتری در کامپوننت جزییات مشتری بارگذاری شود . در این حالت چون دیتا باید از کامپوننت پدر به فرزند انتقال داده شود باید از Input  استفاده کنیم اما زمانی که جزییات مشتری تغییر داده شده و باید لیست مشتریان که کامپوننت پدر هست از این تغییر مطلع شود و تغییرات را در لیست اعمال نماید باید از Output  استفاده شود . به طور خلاصه هر زمان انتقال داده از بالا به پایین در درخت کامپوننت ها اعمال شود از روش Input و در صورتی که این ارتباط از پایین به بالا باشد از Output ها و emit کردن باید استفاده شود . 

Emmiter  ها در انگولار چطور کار می کنند ؟ 

در یک سناریو فرض کنید ما دو عدد کامپوننت داریم . یکی در نقش پدر و دیگری در نقش فرزند . در حقیقت emmiter  یک کلمه فانتری یا خیالی برای اعلام کردن رخ دادن یک رویداد در کامپوننت فرزند به کامپوننت پدر است . شما میتوانید هر نام دیگری برای این رویداد در نظر بگیرید دقیقا مشابه رویداد کلیک برای یک دکمه . 

بهترین روش برای ارتباط بین کامپوننت های Sibling (کامپوننت هایی با رابطه خواهر برادری) چیست ؟ (best practice)

بهترین روش برای ارتباط بین کامپوننت هایی که در یک مسیر و سلسله مراتب نیستند به طور مثال کامپوننت Log برای ثبت کردن رخ داد ها و کامپوننت مشتری که در دو مسیر مختلف نگهداری می شوند استفاده از RxJS Subject  ها هستند.

آیا توصیه می کنید از فرم ها در انگولار به شیوه Reactive  استفاده کنیم یا Template-driven ؟

وقتی نوبت به تصمیم گیری بین Reactive-form ها و Template-driven form ها را دارید .بهترین سوال این است که شما از چه روشی می خواهید برای اعتبار سنجی فرم ها استفاده کنید ؟ هر دوی آنها به خوبی عمل می کنند ، اما یک تفاوت اصلی بین آنها وجود دارد . تیم انگولار پیشنهاد می کند از روش Reactive-form ها استفاده نمایید اما در حالی که من پیشنهاد می کنم از روش Template-driven  ها استفاده نمایید چون قابل درک تر هستند . اما توصیه من این است که از هر روش که استفاده کردید فقط از همان روش در توسعه تمام بخش های برنامه خود استفاده نمایید . به هیچ عنوان از هر دو روش در توسعه برنامه خود استفاده نکنید . 

معمولا چه نوع snippet هایی رو مناسب و مفید میدونید برای استفاده در برنامه های انگولار ؟ 

این extension-pack که برای ویژوال استودیو کد نوشتم تحت عنوان Angular Extensions شامل لیستی از snippet  هاییه که من اغلب استفاده می کنم . مثلا در کدنویسی  اگر a- رو تایپ کنید لیستی از دایرکتیو ها ، روت گارد ها  ، اینترسپتور ها و ماژول هایی به صورت intellisense  برای شما نمایش داده می شوند .

آیا به شرکت ها و یا توسعه دهندگان پیشنهاد می کنید که از ابزار هایی مانند Material Design برای انگولار استفاده کنند ؟  

Material Design  یک design pattern و Angular Material نحوه پیاده سازی اون برای انگولار است تا بتوانید از آن استفاده نمایید . در واقع Angular Material یک سیستم طراحی است که می توانید برای استایل دهی ، رنگ ها ، فونت ها و UI پروژه استفاده نمایید . از آنجاییکه من به استفاده از آن علاقه دارم ، توصیه من به شرکت ها و توسعه دهندگان این است که از یک سیستم مانند Angular Material  یا Bootstrap  و یا Tailwind برای طراحی سیستم خود استفاده نکنند ، می توانند توامان از همه آنها برای پیاده سازی بخش های مختلف طراحی سیستم خود کمک بگیرند.