مقایسه ای شخصی و خام از framework های front-end ?

یکی از دوستان پرسیده بودن که برای یه پروژه جدید که backend ش دات نت کور هست، خوبه که از چه front-end framework ی استفاده بکنیم.

‫‫البته اساتید فن اینجا زیاد هستن، ولی با اجازه شون بنده هم نظر خودم رو بگم.

  • Razor: به هیچ وجه توصیه نمیکنم (مگر برای پروژه های بسیار بسیار ساده). به سرعت شما رو گرفتار میکنه. داینامیک بودن صفحات، نیازمندی تمام سیستم هایی هست که تو این دوران طراحی میشن. اگر از Razor استفاده کنید و بخواید صفحه رو هم پویا نگه دارید (XHR و غیره)، در اون صورت استفاده شما از Razor فقط در حد رندر کردن اولیه صفحه خواهد بود، که با html هم به سادگی میتونستید انجام بدید. در نتیجه فقط دردسرش براتون میمونه. درسته که مدل component based قوی ای داره، ولی تجربه های قبلی نشون داده که این مدل ها فقط اگر تماما در سمت کلاینت یا تماما در سمت سرور باشن به خوبی عمل میکنن.
  • jQueryو html خام!: درسته که هنوز هم میشه با اینها کلاینت رو پیش برد، ولی اگر این کار رو بکنید، به مرور مجبور به ساخت کتابخانه ها و توابع مختلفی برای کارهای مختلف سمت UI خواهید شد، و بعد از مدتی متوجه میشید که مشکلی رو که front-end framework های دیگه در طی سالها حل کردن، شما دارید از اول برای خودتون حل میکنید. چیزی که قبلا ساخته شده رو باید از اول بسازید. که تازه به خوبی framework های موجود هم نخواد شد طبیعتا! چونکه سالها روش کار نشده، و هزاران پروژه باهاش انجام نشده تا اشکالاتش در بیاد!
  • Blazor: به راستی که Blazor گزینه قدری هست تو این دست مقایسه ها (طبیعتا اگر backend دانت کور هست)! بنده تجربه مختصری باهاش داشتم حدود 2 سال پیش. اون موقع به اندازه الان stable نبود، ولی فکر کنم موضوعاتی که میخوام مطرح کنم تا حد زیادی صدق بکنه:
    مزایا
    - کد مشترک بین front و back! چه چیزی بهتر از این؟ میتونید کلیه کتابخانه ها، کدهای validation، و business logic که برای سمت سرور استفاده میکنید، توی clientهم به کار بگیرید! (به نظر بنده این مزیت، یکی از معایب اصلی ش هم هست!! عرض میکنم.)
    - عدم نیاز به یادگیری زبان برنامه نویسی جدید (مثلا JS) - طبیعتا هزینه یادگیری یک framework جدید رو دارید به هر حال!
    معایب
    - عدم بلوغ کافی؟ ? این رو مطمئن نیستم، چون خیلی وقته که اخبارش رو دنبال نکردم. این رو بقیه اساتید میتونن تأیید یا رد کنن. بر طبق آخرین نظر Technology Radar (که البته مال یکسال و خورده ای پیش هست)، بهتره در پرژه ای استفاده بشه که بتونه ریسک رو تحمل کنه.
    - کندی و سنگین بودن. این رو هم مطمئن نیستم، چون جدیدا بررسی نکردم. ولی با توجه به اینکه باید یک dotnet runtime روی مرورگر دانلود و اجرا کنه، حتما حافظه به مراتب بیشتری از framework های جاوااسکریپتی میگیره، که runtime شون از قبل روی مرورگر هست. این موضوع زمان لود اولیه وبسایت رو هم به شدت افزایش میده. البته که فایلها cache میشن و لازم نیست در دفعات بعد لود بشن، ولی به هر حال دیگه!
    در ضمن در تجربه ای که من باهاش داشتم، کندی رو به طور کامل میشد احساس کرد. در حال حاضر قطعا به اون صورت نیست.
    - در هم قاطی شدن کدهای back و front! این مورد شاید یه مقدار خنده دار به نظر بیاد. ولی اینکه ندونیم کد سی شارپی که الان داریم مینوسیم در آینده حتما فقط سمت back اجرا میشه یا به frontهم منتقل میشه، به نظر من خیلی میتونه فاجعه بار باشه! نیازمندی های این دو از هم به شدت متفاوته. اشتراک گذاری بی رویه کدهای backend با front، میتونه خیلی خطرناک باشه. درسته که با مدیریت درست میشه جلوی این رو گرفت، ولی با این حال ریسک بالایی داره.
    - مگه JavaScript یا TypeScript چشونه؟! ? این نظر دیگه بسیار شخصیه. بنده علاقه زیادی به JS دارم، و اصلا تمایل ندارم در سمت کلاینت هم از زبان statically typed و کاملا OO سی شارپ استفاده کنم. درسته که میشه تو سی شارپ هم کد functionalنوشت، یا dynamic typing داشت (نکنید این کار رو!!)، ولی باز در این زمینه ها JS رو ترجیح میدم.

موارد زیر دیگه از حوزه تخصص بنده، بیشتر از موارد بالا دور میشن! ? ولی باز هم نظر خودم رو میگم خدمتتون.

  • Angular: همونطور که میدونید، Angular یه framework کامل برای توسعه app های client-side هست. هر چی که شما لازم داشته باشید رو با خودش داره! در عین حال پیچیده هم هست و نیاز به یادگیری زیادی داره. توصیه شده از اون برای app هایی استفاده کنید که دارای form های پیچیده و data-entry زیاد هستن. برای appهای کوچیک فکر کنم توصیه نمیشه!
  • ‏React.js و Vue.js: این دو رو من از Angular هم کمتر بلدم! ولی میدونیم که استفاده از اونها زیاد سخت نیست و با صرف هزینه کم میشه یادشون گرفت. ولی نکته ای که دارن اینه که برای خیلی از کارهای مورد نیازتون، شما مجبور به استفاده از library های دیگه ای میشید، چون خود اینها اون رو support نمیکنن. در واقع گفته میشه که React و Vue هر دو "کتابخانه" هایی هستن که در توسعه UI به شما کمک میکنن. در مقابل، Angular یه framework کامله. (دوستان صاحبنظر، ببخشید اگر نظراتم زیاد دقیق نیست! لطفا در صورت لزوم با کامنت های خودتون بنده رو اصلاح بفرمایید)
    از بین این دو، Vue ساده تر هست و در زمان کمتری میتونه شما رو به نتیجه برسونه.

در آخر خدمتتون بگم که نظرات بنده خالی از اشکال نیست. در ضمن از هر کدوم که استفاده کنید کارتون پیش میره. بالاخره پروژه های زیادی تو دنیا داره با همین تکنولوژی ها انجام میشه.

فکر کنم مشخص باشه که نظر بنده به سمت استفاده از یکی از framework های JS ی هست! این که کدوم رو انتخاب کنید، بیشتر بستگی به دانش موجود در تیم تون، و پیچیده گی پروژه داره.

ممنونم که وقت گذاشتید و مطالعه کردید.