همانطور که چشم انداز دیجیتال همچنان به تکامل خود ادامه می دهد، اهمیت معماری frontend برای برنامه های کاربردی وب را نمی توان دست کم گرفت. یک معماری ظاهری خوب طراحی شده نه تنها تجربه کاربر را افزایش می دهد، بلکه قابلیت نگهداری و مقیاس پذیری پروژه را نیز تضمین می کند. در این مقاله از آنوفل، ما اصول و مفاهیم کلیدی مرتبط با ساخت یک معماری فرانت اند تمیز و مقیاس پذیر را بررسی خواهیم کرد. ما اصول SOLID، KISS، DRY و DDD را مورد بحث قرار خواهیم داد و به الگوهای مختلف معماری و ضدالگوهایی که میتوانند بر کیفیت کد ظاهری شما تأثیر بگذارند، خواهیم پرداخت.
چرا معماری Frontend مهم است؟
معماری Frontend نقش مهمی در برآوردن الزامات کاربردی و غیر کاربردی یک برنامه وب دارد. درست مانند معماری بکاند، معماری فرانت اند به درک پیچیدگی پروژهها، کاهش ریسکها و بهینهسازی زمان و هزینهها کمک میکند. علاوه بر این، یک معماری فرانت اند با طراحی خوب، قابلیت نگهداری و مقیاس پذیری پروژه را تضمین می کند. با این حال، متقاعد کردن ذینفعان در مورد اهمیت معماری فرانت اند می تواند چالش برانگیز باشد، زیرا اغلب تحت الشعاع تمرکز بر معماری بک اند قرار می گیرد.
معماری لایه ای: یک رویکرد مشترک
یکی از متداول ترین الگوهای معماری که در توسعه frontend استفاده می شود، معماری لایه ای (Layered Architecture) است. این الگو اپلیکیشن را به لایه های مختلفی تقسیم می کند که هر کدام مسئولیت خاصی دارند. در معماری لایه لایه، ما معمولاً لایههای زیر را داریم:
لایه API: این لایه ارتباط با API بک اند را مدیریت می کند و مسئول اشیاء انتقال داده (DTOs) و خدمات تولید شده توسط ابزارهایی مانند OpenAPI Generator است.
لایه سرویس: لایه سرویس شامل نگاشتهایی است که تبدیل DTO به مدلهای frontend و بالعکس را انجام میدهند. همچنین از طریق نقاط انتهایی REST با لایه API ارتباط برقرار می کند.
لایه Store: لایه ذخیره به عنوان یک ذخیره جهانی عمل می کند که شامل تمام داده های بازیابی شده از لایه سرویس است. این یک منبع داده متمرکز برای اجزای فرانت اند فراهم می کند.
Booking Domain: دامنه رزرو یا Booking Domain منطق دامنه اصلی برنامه را نشان می دهد. این شامل مدل ها و اجزایی است که با لایه فروشگاه تعامل دارند. اجزای هوشمند به طور مستقیم با فروشگاه در تعامل هستند، در حالی که اجزای بی زبان، اجزای قابل استفاده مجدد هستند که می توانند در زمینه های مختلف مورد استفاده قرار گیرند.
در حالی که معماری لایهای یک رویکرد ساختاریافته برای توسعه frontend ارائه میکند، تعریف قوانین برای جلوگیری از اشتباهات رایج ضروری است. توسعه دهندگان باید از استفاده مستقیم از DTO در اجزای خود یا برقراری ارتباط با لایه سرویس بدون عبور از لایه فروشگاه خودداری شوند. علاوه بر این، اجزای گنگ نباید مستقیماً با لایه سرویس تعامل داشته باشند.
جلوگیری از اشتباهات با بیت و Nx
برای اجرای قوانین تعریف شده و جلوگیری از اشتباهات معماری می توان از ابزارهایی مانند Bit و Nx استفاده کرد. Bit و Nx سیستمهای ساخت منبع باز قدرتمندی هستند که بهرهوری توسعهدهنده را افزایش میدهند، عملکرد CI را بهینه میکنند و کیفیت کد را حفظ میکنند. این ابزارها امکان معرفی قوانین وابستگی را در پروژه فراهم می کند و اطمینان حاصل می کند که توسعه دهندگان هنگام استفاده از لایه اشتباه یا نقض دستورالعمل های معماری خطا دریافت می کنند. با استفاده از Bit یا Nx، می توانید یک معماری frontend سازگار و قابل نگهداری را اعمال کنید.
کاربرد مفاهیم طراحی دامنه محور (DDD)
برای افزایش بیشتر قابلیت نگهداری پایگاه کد فرانت اند، می توانید مفاهیم طراحی دامنه محور (DDD) را در دامنه رزرو خود اعمال کنید. DDD تقسیم دامنه به زیر دامنهها را تشویق میکند که هر کدام زمینه خاص خود را دارند و زبان فراگیر خود را دارند. این رویکرد به سازماندهی پایگاه کد و تراز کردن آن با الزامات تجاری کمک می کند. هر زیر دامنه از معماری لایه ای پیروی می کند و API ها برای تعامل بین زیر دامنه های مختلف استفاده می شوند.
به عنوان مثال، در دامنه رزرو، میتوانید زیردامنههایی مانند «ویژگی» برای مؤلفهها و خدمات هوشمند، «UI» برای مؤلفههای گنگ، «دامنه» برای مدلها و «Util» برای توابع کاربردی خاص برای بافت محدود داشته باشید. این رویکرد با اعمال مرزهای واضح و جداسازی نگرانی ها، یک معماری پاک را ممکن می سازد.
برای آشنایی با TDD یا توسعه تست محور این مقاله را بررسی کنید.
اصولی برای اجزای تمیز و قابل نگهداری
وقتی صحبت از اجزای منفرد در معماری frontend می شود، چندین اصل باید برای اطمینان از کد تمیز و قابل نگهداری اعمال شود.
اصول SOLID
اصل SOLID مجموعه ای از پنج اصل طراحی است که طراحی نرم افزاری را که درک، نگهداری و گسترش آن آسان است، ترویج می کند. هر جزء باید یک مسئولیت واحد داشته باشد (اصل تک مسئولیت) و از ترکیب بر ارث استفاده شود (اصل باز-بسته). کامپوننت ها نباید مجبور به پیاده سازی واسط های غیر ضروری (تفکیک رابط) شوند و نباید مستقیماً به سرویس های سطح پایین وابسته باشند (وارونگی وابستگی).
اصل KISS
اصل KISS (Keep It Short and Simple) بر ساده و مختصر نگه داشتن کد تا حد امکان تاکید دارد. حفظ و درک کد پیچیده ممکن است دشوار باشد. با ساده نگه داشتن کد، شانس معرفی باگ را کاهش می دهید و همکاری و مشارکت در پروژه را برای توسعه دهندگان دیگر آسان می کنید.
اصل DRY
اصل DRY (خودت را تکرار نکن) از قابلیت استفاده مجدد و جلوگیری از تکرار کد حمایت می کند. منطق مشترک باید به توابع یا خدمات مفید منتقل شود تا اطمینان حاصل شود که می توان تغییرات را در یک مکان واحد ایجاد کرد. این اصل احتمال ایجاد ناسازگاری ها را کاهش می دهد و قابلیت نگهداری را بهبود می بخشد.
اجتناب از آنتی پترن ها
علاوه بر پیروی از اصول فوق الذکر، آگاهی از آنتی پترن های رایجی که می توانند مانع از نگهداری پایگاه کد فرانت اند شما شوند، بسیار مهم است. در اینجا چند ضد الگو یا آنتی پترن وجود دارد که باید از آنها اجتناب کنید:
وارد کردن کتابخانههای غیر ضروری: وارد کردن کتابخانههای غیر ضروری میتواند حجم بسته را افزایش دهد و بر عملکرد برنامه شما تأثیر بگذارد. ضرورت هر کتابخانه را به دقت ارزیابی کنید و در صورت غیر ضروری گزینه های جایگزین را در نظر بگیرید.
اشتراک های تو در تو: استفاده از اشتراک های تودرتو می تواند منجر به کدهای پیچیده و سخت شود. مهم است که کد خود را صاف کنید و اشتراکها را به شیوهای ساختاریافته مدیریت کنید تا از جهنم کالبک جلوگیری کنید و خوانایی را بهبود ببخشید.
افزودن منطق تجاری در قالب ها: الگوها باید در درجه اول لایه ارائه را مدیریت کنند و نباید حاوی منطق تجاری پیچیده باشند. جداسازی منطق کسب و کار از الگوها، قابلیت نگهداری را بهبود می بخشد و امکان تست و بازسازی آسان تر را فراهم می کند.
منطق کسب و کار آزمایش نشده: عدم تست منطق کسب و کار شما می تواند منجر به رفتار غیرمنتظره شود و شناسایی و رفع مشکلات را دشوار کند. برای اطمینان از صحت کد خود، تست های واحد جامع و تست های یکپارچه سازی را اجرا کنید.
بهترین روش ها برای کد قابل نگهداری
برای اطمینان از اینکه کد شما همچنان که در طول زمان رشد میکند قابل نگهداری است، چندین بهترین روش وجود دارد که میتوانید دنبال کنید:
تعریف قوانین eslint: قوانین eslint را برای اجرای استانداردهای کدگذاری و رفع مشکلات احتمالی در مراحل اولیه توسعه پیکربندی کنید. این به حفظ ثبات و خوانایی در کل پایگاه کد شما کمک می کند.
استفاده از stylelint: بله، Stylelint برای CSS و Sass است که به حفظ استایل ثابت در پروژه شما کمک می کند. این تضمین میکند که کد شما از بهترین شیوههای صنعت پیروی میکند و شانس معرفی اشکالات استایل را کاهش میدهد.
تست منطق کسب و کار: برای اطمینان از صحت و نگهداری آن، تست های واحد کاملی را برای منطق کسب و کار خود اجرا کنید. پوشش تست به گرفتن رگرسیون ها کمک می کند و تغییرات آتی در پایگاه کد را تسهیل می کند.
ساخت کامپوننت کوچک قابل استفاده مجدد: مفهوم قابلیت استفاده مجدد کامپوننت را با ساخت اجزای کوچک و متمرکزی که می توانند به راحتی در برنامه شما مجدداً استفاده شوند، بپذیرید. این باعث کاهش تکرار کد و بهبود قابلیت نگهداری می شود.
استفاده از ویژگیهای ES6 و Typescript: از ویژگیها و ابزارهای زبان مدرن مانند ES6 و TypeScript برای نوشتن کدهای تمیزتر و گویاتر استفاده کنید. این ویژگیها امکان بررسی بهتر نوع، بهبود مدیریت خطا و افزایش بهرهوری توسعهدهنده را فراهم میکنند.
نتیجه
ساخت یک معماری فرانت اند تمیز و مقیاس پذیر برای موفقیت هر برنامه وب بسیار مهم است. با پیروی از اصول SOLID، KISS، و DRY و به کارگیری مفاهیم Domain-Driven Design، می توانید یک پایگاه کد قابل نگهداری و ماژولار ایجاد کنید. علاوه بر این، اجتناب از ضد الگوهای رایج و پیروی از بهترین روشها برای نگهداری کد، تضمین میکند که معماری ظاهری شما قوی و سازگار باقی میماند. با اولویت دادن به معماری frontend در کنار معماری باطن، می توانید برنامه های وب بسیار کارآمد و کاربرپسند ایجاد کنید.