مقدمه: چرا معماری لایه ای برای برنامه های موبایل Cross-Platform اهمیت دارد

توسعه تلفن همراه Cross-platform استاندارد برای تیم هایی است که به دنبال به حداکثر رساندن تلاش تکراری هستند. Frameworks مانند Flutter، React Native و .Net MAUI اجازه می دهد یک کد واحد برای اجرای iOS و Android، اما انتخاب معماری نرم افزار و برنامه های هدایتی خاص، تفاوت بین یک برنامه های هدایت قابل نگهداری، مقیاس پذیر و یک پلت فرم پیچیده از ساختار خاص لایه را به طور خاص، به طور خاص، به طور موثر ساده سازی می کند - هر زمان که نگرانی های کد گذاری شده است.

درک معماری لایه ای

معماری لایه، که اغلب به عنوان معماری n-tier نامیده می شود، یک برنامه را به برش های افقی تقسیم می کند.هر لایه دارای نقش به خوبی تعریف شده است و با لایه های مجاور از طریق قراردادها یا رابط ها ارتباط برقرار می کند. رایج ترین لایه ها در برنامه های تلفن همراه عبارتند از:

  • لایه پیش بینی - رابط کاربری (UI) و تجربه کاربر (UX) را مدیریت می کند، صفحه نمایش را ارائه می دهد، حرکات را ثبت می کند و حالت UI را مدیریت می کند.در چارچوب های متقابل پلتفرم، این لایه معمولا در زبان declarative چارچوب نوشته می شود (به عنوان مثال، Flutter، ویجت، ReactX بومی).
  • منطق کسب و کار (BLL) - قوانین اصلی، گردش کار، و محاسبات را که تعریف آنچه که برنامه انجام می دهد، نگه می دارد.این لایه است- آگنوستیک و هرگز نباید به پلت فرم خاص API اشاره.
  • [DAL] Layer Access Layer - منابع داده مانند API های از راه دور، پایگاه داده های محلی یا ذخیره سازی فایل را فراهم می کند.این یک رابط یکپارچه برای منطق کسب و کار فراهم می کند، اجازه می دهد بقیه برنامه نادیده بگیرند که آیا داده ها از SQLite، REST یا GraphQL می آیند.
  • [اختیاری] لایه خدمات [FLT 1] - گاهی اوقات برای مدیریت نگرانی های متقابل مانند تأیید اعتبار، کاتتر یا تجزیه و تحلیل قرار می گیرد.

جدایی دقیق به این معنی است که تغییر در لایه ارائه (به عنوان مثال، تغییر از یک لیست به یک شبکه) بر قوانین کسب و کار یا دسترسی به داده ها تأثیر نمی گذارد، به طور مشابه، تغییر از Firebase به یک backend سفارشی تنها به روز رسانی در لایه دسترسی داده ها نیاز دارد.این انزوا به ویژه در پروژه های متقابل پلتفرم که الگوهای UI خاص پلت فرم (طراحی بر روی Android، دستورالعمل های رابط انسانی) در منطق مشترک تجاری مشترک است.

مزایای کلیدی برای توسعه Cross-Platform

حداکثر قابلیت استفاده Code Reusability

در یک معماری لایه ای مناسب، منطق کسب و کار و لایه های دسترسی داده می تواند یک بار نوشته شود و در تمام پلتفرم های هدف به اشتراک گذاشته شود. لایه ارائه هنوز هم ممکن است حاوی برخی از کد های خاص پلت فرم (به عنوان مثال، ساختار ناوبری یا دستکاری فونت)، اما منطق اصلی همچنان یکسان است.این به طور چشمگیری مقدار کل کد را برای نوشتن، آزمایش و حفظ، یک پروژه Flutter که مدیریت کل (فایل داده های ذخیره شده) و یا (با استفاده از طریق دسکتاپ) را جدا می کند، و یا کل داده های دولتی را کاهش می دهد.

۲- قابلیت حفظ مستقل

هر لایه می تواند به روز رسانی، ثابت یا جایگزین شود بدون اینکه بر دیگران تأثیر بگذارد.اگر یک API شخص ثالث فرمت نقطه پایانی خود را تغییر دهد، تنها لایه دسترسی داده ها نیاز به اصلاح دارد.اگر تیم طراحی می خواهد رابط کاربری را اصلاح کند، لایه ارائه می تواند بازنویسی شود در حالی که منطق کسب و کار باقی مانده است، این باعث کاهش اشکالات و سرعت چرخه های آن می شود، برنامه های قابلیت استفاده بیشتر به آداپتورهای خاص محدود می شود.

مقیاس پذیری برای ویژگی های آینده و پلتفرم ها

معماری لایه به طور طبیعی از مقیاس پذیری پشتیبانی می کند و ویژگی های جدید اغلب به معنی گسترش لایه منطق کسب و کار (به عنوان مثال، macOS یا ویندوز)، در حالی که لایه داده ها ممکن است نیاز به اضافه کردن جزئی داشته باشد، مهم تر از آن، اگر تیم تصمیم به پشتیبانی از یک پلت فرم جدید (به عنوان مثال، macOS یا ویندوز) داشته باشد، آنها فقط نیاز به پیاده سازی یک لایه ارائه جدید دارند؛ کسب و داده های کسب و داده های مشترک در حال حاضر سازگار هستند.

۴- تست و دبوینگ

لایه ها را می توان در انزوا آزمایش کرد. تست واحد می تواند در برابر لایه منطق کسب و کار بدون تنظیم UI یا ادغام شبکه اجرا شود. آزمایشات لایه دسترسی داده ها را با استفاده از خدمات ذخیره سازی به کار می برند. لایه ارائه را می توان با ویجت یا تست های جزء آزمایش کرد، زیرا هر لایه دارای یک مسئولیت واحد است، نقص ها آسان تر برای پیدا کردن یک لایه در یک محاسبه پیچیده است که تقریبا در منطق کسب و کار، لایه کد جدا کننده نیست، همه سیستم عامل های پشتیبانی یکسان است که از یک مجموعه نرم افزار های نرم افزار پشتیبانی می کند.

همکاری تیم موازی

معماری لایه شده تیم ها را قادر می سازد تا همزمان کار کنند. UI /UX طراحان می توانند بر روی لایه ارائه تمرکز کنند در حالی که توسعه دهندگان backend بر روی لایه دسترسی داده کار می کنند و منطق backend/API در منطق کسب و کار به اشتراک گذاشته می شود. ارتباطات فقط نیاز به موافقت در رابط (قراردادهای) بین لایه ها دارد.

نکات اجرایی عملی

تعریف Clear Boundaries

رایج ترین اشتباه این است که اجازه دهید لایه ها به یکدیگر خونریزی کنند.یک آنتی ژن کلاسیک دسترسی مستقیم پایگاه داده در یک جزء UI است. Enforce قوانین سخت گیرانه: لایه ارائه هرگز نباید یک راننده پایگاه داده را وارد کند و لایه منطق کسب و کار هرگز نباید یک ویجت UI را مرجع دهد.استفاده از وابستگی به انتقال خدمات بین لایه های React Native، این می تواند با ارائه دهندگان زمینه و ارائه دهندگان سفارشی به دست آورد؛ یا بسته های ویجت یا بسته های به ارث برده شده.

گزینه Platform-Agnostic Tools for Shared Layers را انتخاب کنید

برای به حداکثر رساندن استفاده مجدد، نوشتن منطق کسب و کار و لایه های دسترسی داده در یک زبان و چارچوب (۱) که هدف-agnostic هستند. برای Flutter، کد Dart به طور طبیعی در سراسر اهداف به اشتراک گذاشته می شود. برای React Native، TypeScript/JavaScript انتخاب واضحی است.از ارجاع به API های خاص پلت فرم (به عنوان مثال UserDeference) در پشت کتابخانه های جداگانه به اشتراک گذاشته شده است.

استفاده از رابط برای ارتباطات بین-Layer

هر لایه باید به Abstractions (interfaces یا پروتکل ها) بستگی داشته باشد، نه پیاده سازی های بتنی، این باعث می شود که به طور خاص به مبادله اجزای آن بی اهمیت باشد.به عنوان مثال، تعریف رابط در لایه منطق کسب و کار و ارائه پیاده سازی برای تولید (Firebase) و تست (mock) این الگوی برای تست واحد و سازگاری با سیستم عامل های مختلف در هنگام استفاده از یک کتابخانه متفاوت (مانند استفاده از بیومتریک مختلف در برابر استفاده از یک کتابخانه های مختلف) بسیار مهم است.

UI را از Business Logic جدا کنید

این اصل به ویژه برای برنامه های متقابل پلتفرم مهم است، زیرا دستورالعمل های UI متفاوت است. منطق کسب و کار نباید به این نکته اهمیت دهد که آیا یک دکمه به عنوان یک ماده (FLT:1) یا یک SwiftUI (FLT:2.) در عمل، استفاده از یک الگوی مدیریت دولتی (BLoC، Redux، MobX، Riverpod) که رویدادهای UI را از به روز رسانی های لایه ارائه می کند؛ به سادگی واکنش می دهد و واکنش می دهد.

لایه های Refactor

همانطور که برنامه رشد می کند، مرزهای لایه ممکن است بررسی های معماری دوره ای را تار کند. [۱] به دنبال نشانه های انتزاع نشتی، مانند درخواست های شبکه UI به طور مستقیم یا منطق کسب و کار حاوی پرس و جو پایگاه داده. refactor زود برای جلوگیری از بدهی های فنی خودکار و ابزارهای اجرایی معماری (به عنوان مثال، در دارت یا پلاگین ESL برای واردات) می تواند به حفظ نظم و انضباط کمک کند.

چالش های ضد انضباط

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

داستان های موفقیت جهانی

بسیاری از برنامه های متقابل پلتفرم معماری لایه ای را اتخاذ می کنند. علی بابا پلت فرم تجارت الکترونیک تلفن همراه از یک رویکرد معماری تمیز با داده های به خوبی تعریف شده، دامنه و لایه های ارائه استفاده می کند، به آنها اجازه می دهد تا تقریبا 90٪ از کد را در سراسر iOS و Android به طور مشابه به اشتراک بگذارند، [F:2LT آموزش و بخش های اصلی را قادر می سازد تا با استفاده از یک ابزار تست UI / سرعت و تجزیه و تجزیه و تجزیه و تحلیل کاربر، و تحلیل کنند.

نتیجه گیری

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