در اعماق فلاتر - کیکی سه لایه

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

فلاتر ، فریمورکِ لایه ای

فریمورک فلاتر از به هم پیوستن چندین بخش ساخته شده :

  • Dart Framework
  • C++ Engine
  • Platform-Specific Embedder

تیم فلاتر و سازندگانش اومدن و تمام بخش های سازنده ی اون رو به صورت لایه های روی هم قرار گرفته ، در نظر گرفتن و در واقع ساختار فلاتر یک ساختار و معماری لایه ایه (Layered Architecture) علاوه بر لایه ای بودن معماری ، فلاتر یک فریمورک منعطفه و هر بخش اون قابل جاگزینه (Replaceable) یعنی میتونیم هر بخش رو برداریم و کد های خودمون رو بجاش قرار بدیم و خروجیی که دلمون میخواد رو بگیریم. در فریمورک فلاتر طراحی لایه ای این رو میرسونه که هر کتابخونه وابسته به کتابخونه ی قبلی‌شه (در ساختار لایه ای ، هر لایه وابسته ی لایه ی زیرین خودشه).

نگاه به ساختار از پایین به بالا

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

همینطور که تو تصویر زیر میبینید فلاتر از سه لایه ی کلی و اصلی تشکیل شده که هرکدوم از این لایه ها درون خودش یسری لایه های دیگ داره که روی هم قرار گرفتن و یک ساختار لایه ای دیگرو تشکیل دادن که تو قسمتای بعدی باهم بررسی‌شون میکنیم. برای اینکه راحت تر درک کنید که هر لایه چجوری کار میکنه و لایه ها چطوری باهم در ارتباط هستن بررسی رو از پایین ترین لایه یعنی Platform-Specific Embedder به بالاترین لایه یعنی Dart Framework شروع میکنیم.

این عکس رو از داکیومنت فلاتر کش رفتم علل حساب داشته باشید باهم بررسی‌ش کنیم =)
این عکس رو از داکیومنت فلاتر کش رفتم علل حساب داشته باشید باهم بررسی‌ش کنیم =)

بررسی Flutter Platform-Specific Embedder

تمام اپلیکیشن هایی که ما با فریمورک فلاتر میسازیم درست عین اپلیکشین های نیتیوِ پلتفرم کامپایل و پکیج میشن مثلا در اندروید کد های فلاتر ما در apk بسته بندی میشن و آماده میشن تا ران تایم اندروید اونهارو اجرا کنه لایه‌ی اِمبِدِر رابطه‌ی خیلی نزدیک و تنگاتنگی با لایه ی بالاترش ،‌ یعنی موتور (Engine) ، داره. وظیفه اِمبِدِر درواقع برقراری ارتباط بین موتور فلاتر با شِل (Shell) پلتفرم مقصد هست و وظایف دیگه ای عین مطلع کردن موتور از وضعیت فعلی چرخه‌ی حیات (Life Cycle) اپلیکیشن و سایر سرویس های دیگه ای که موتور فلاتر برای انجام دادن کارش نیاز داره رو مهیا میکنه.
اِمبِدِر ها هم یکسری کد نیتیو پلتفرم هایی هستن که فلاتر ساپورت میکنه و با موتور فلاتر در ارتباط هستن مثلا امبدر اندروید فلاتر با Java و Cpp نوشته شده ، امبدر iOS و MacOS با زبان های Objective-C و Objective-Cpp نوشته شده و امبدر ویندوز و لینوکس هم با Cpp نوشته شده. به لطف همین ویژگی ، فلاتر از قدرت خیلی جالبی بهره مند شد که میتونه به عنوان UI و ماژول با کد های نیتیوِ پلتفرم ترکیب و کامپایل بشه ( در این شرایط شما منطق و ارتباط با پلتفرم رو با زبان های نیتیو مینویسید و UI رو با فلاتر مینویسید و به عنوان یک ماژول میتونید در کد های نیتیو تون ایمپورتش کنید استفاده کنید).

بررسی Flutter C++ Engine

لایه‌ی وسط و هسته ی فلاتر یعنی انجین‌ش ، قلب تپنده ی فلاتره که با Cpp نوشته شده و هروقت نیازی به رندر کردن باشه دست به کار میشه ولی وظایف انجین فلاتر فقط به همین یک موضوع ختم نمیشه ، این انجین وظیفه ی عملیات های مربوط به فایل ها و نتورک / IO رو به عهده داره ، وظیفه ی کارای گرافیکی رو بر عهده داره (به لطف انجین گرافیکی ۲ بعدی skia در ادامه تو قسمت های بعدی در رابطه با skia هم صحبت میکنیم) و از همه مهم تر درون خودش یک ران تایم دارت داره که کد های دارت رو روی این ران تایم اجرا میکنه. (درباره ی دارت هم داخل Dartlang TV صحبتای باحالی میکنیم =) )

بررسی Flutter Dart Framework

و میرسیم به بالاترین لایه ، همون لایه ای که همه ی برنامه نویسیای فلاتر با اون درگیرن ، این لایه که کاملا با زبان دارت نوشته شده نسل جدیدی از طراحی UI رو ارائه میده که الان در حال حاضر در فلاتر پیاده سازی شده (در واقع طراحی UI به صورت Declarative که بر مبنای پارادایم Reactive programming هست) این بخش تقریبا آشنا ترین بخش برای همه ی برنامه نویساییه که با فلاتر دست و پنجه نرم کردن.

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

فکنم دیگ متوجه شدید که چرا اسم این قسمت رو گذاشته بودم کیکی سه لایه =)‌

منابع

داکیومنت فلاتر

گیت هاب فلاتر