آناتومی یک برنامه ققنوس

ساخت وبلاگ

blog post background

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

فهرست مطالب

معرفی

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

در این مقاله ، من می خواهم یک مرور کلی از مفاهیم درگیر در ساخت یک برنامه ققنوس ارائه دهم تا افراد علاقمند به اکسیر و ققنوس بتوانند تعیین کنند که آیا این برای آنها است.

چیزهایی که باید در مورد Elixir بدانید

اصل و نسب

Elixir یک زبان برنامه نویسی است که توسط خوزه والیم ، عضو تیم Ruby on Rails Core ایجاد شده است. اگرچه اکسیر یک زبان جوان است ، اما یک اکوسیستم بسیار غنی دارد و من در یافتن بسته هایی برای تحقق اهداف مشترک مشکل ندارم.

Elixir یک زبان کامپایل شده است اما روی Erlang VM یا Beam اجرا می شود. ارلانگ در ابتدا برای برنامه های کاربردی از راه دور طراحی شده بود. این بدان معنی است که ارلانگ با سیستم های واقعی ، بسیار در دسترس ، تحمل گسل و همزمان در ذهن طراحی شده است که برای اکسیر عالی است.

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

فرایندها

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

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

چیزهایی که باید در مورد ققنوس بدانید

فلسفه عمومی

Phoenix یک چارچوب برنامه وب مدرن است که برای Elixir ساخته شده است. این بسیار عقیده است اما به روشی خوب. شما احتمالاً فکر می کنید وقتی شنیدن یک چارچوب "بسیار معتبر" است که می تواند از نیازهای معمول در ساخت API پشتیبانی بزرگی داشته باشد ، اما به محض اینکه نیاز به شکستن و انجام کاری غیرمعمول انجام دهید ، چاره ای جز اعتماد به عجیب و غریب نداریدهک و کد زشت. با ققنوس ، من این مشکل را ندیده ام. معماری آن به شما امکان می دهد تا با سهولت در هر کد مورد نیاز خود بافته شوید.

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

Elixir برای هماهنگی تغییرات به کتابخانه ای به نام پلاگین متکی است. در اصل ، پلاگین به شما امکان می دهد توابع یا ماژول های کوچک را که در یک ساختار داده قرار دارند - به طور معمول یک اتصال - تعریف کنید و آن را با اصلاحات جزئی برگردانید. این بدان معنی است که هر درخواست به سرور ققنوس شما اساساً از طریق یک سری توابع عبور می کند تا زمانی که تمام داده های لازم برای ارسال به عنوان پاسخ در دسترس باشد.

ماکرو

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

معماری برنامه ققنوس

همانطور که قبلاً ذکر شد ، ققنوس از الگوی MVC پیروی می کند ، بنابراین جریان از طریق برنامه شما باید آشنا باشد:

Endpoint> Router> Controller/Context> View>قالب

به منظور دنبال کردن ، ما یک برنامه ققنوس را می چرخانیم. این امر به Elixir نصب شده بر روی دستگاه شما نیاز دارد. به خاطر کوتاه بودن ، مراحل نصب Elixir را درج نمی کنم ، اما توصیه می کنم نصب خود را با ASDF مدیریت کنید. وب سایت ThinkingLixir.com مقاله خوبی دارد که آن را توضیح می دهد: https://thinkingelixir.com/install-elixir-using-asdf/

پس از نصب آن ، می توانیم از MIX برای نصب ژنراتور برنامه Phoenix استفاده کنیم:

-Code Language-Bash نگهدارنده-$ Archive. Install Hex PHX_NEW 1. 5. 1

اکنون می توانیم با اجرای یک پروژه جدید ققنوس ایجاد کنیم:

-Code Language-bash نگهدارنده-$ مخلوط phx. new anatomy_app

سرانجام ، ما می توانیم به فهرست جدید پروژه خود برویم و سرور خود را شروع کنیم:

-Code Language-bash نگهدارنده-$ CD anatomy_app $ mix phx. server

با تنظیم پروژه جدید ما ، به بعد به معماری!

نقاط پایانی

هنگامی که اتصال توسط یک برنامه ققنوس دریافت می شود ، اولین توقف نقطه پایانی است. نقطه پایانی فقط یک پلاگین است که چند نگرانی را بر عهده دارد:

  • این یک بسته بندی را برای شروع و متوقف کردن فرآیندهای بخشی از درخت نظارت فراهم می کند.
  • این خط لوله پلاگین اولیه را برای انتقال درخواست تعریف می کند.
  • این پیکربندی ها را برای برنامه شما مدیریت می کند.

اگر پرونده ای را که نقطه پایانی ما را تعریف می کند ، lib/anatomy_app_web/endpoint. ex را باز کنیم ، می بینیم که این فایل از پلاگین و سوکت ماکرو برای تعریف موارد معمول یک سرور وب استفاده می کند: تنظیم سوکت ، رسیدگی به محتوای استاتیک ،مدیریت جلسه و ارسال اتصال به روتر.

روتر

پرونده lib/anatomy_app_web/router. ex را باز کنید. دقیقاً مانند فایل نقطه انتهایی ، از ماکرو استفاده می کند تا خطوط لوله پلاگین مختلفی را ایجاد کند تا قبل از انتقال به کنترلرها ، درخواست را از طریق آن ارسال کند. روتر مکانی عالی برای ایجاد هرگونه به روزرسانی در اتصال شما است که به پایین دست نیاز خواهید داشت. از آنجا که روتر تصمیم می گیرد که کنترل کننده درخواست را به آن ارسال کند ، مکان بسیار خوبی برای شامل کد مجوز و احراز هویت شماست.

با نگاهی به پرونده ، چندین ماکرو را می بینیم:

  • خط لوله - از این ماکرو برای گروه بندی شاخه ها استفاده می شود تا به عنوان یک واحد اجرا شوند. می بینید که ما یک خط لوله به نام مرورگر داریم و فقط انجام برخی از کارهای عمومی WebServer مانند واکشی جلسه و انجام چک های اساسی امنیتی است.
  • دامنه - ماکرو دامنه به شما امکان می دهد مسیرها/گروههای خاصی از مسیرها را با هم گروه بندی کنید تا تمام درخواست ها از طریق همان مجموعه از شاخه ها اجرا شوند. یک مورد استفاده عالی برای این کار مخفی کردن مسیرهای سرپرست است که تأیید می کند کاربر یک مدیر است قبل از اینکه اجازه ادامه آنها را بدهد.
  • دریافت - این به سادگی یک مسیر را برای هرگونه درخواست دریافت به "/" تعریف می کند و اتصال به عملکرد شاخص را در PageController ارسال می کند. ققنوس ماکروها را برای همه انواع درخواست فراهم می کند و شامل یک ماکرو برای تعریف یکباره پس از کنوانسیون نامگذاری است.

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

کنترل کننده ها/زمینه ها

کنترلر جایی است که ما ساختار "نظر" را می بینیم که ققنوس اعمال می کند. به جای داشتن یک کنترلر که مدیریت خواندن ، به روزرسانی ، جمع آوری و سازماندهی را انجام دهد ، این مسئولیت ها را تقسیم می کند. این واقعاً یک ایده انقلابی نیست و احتمالاً شما آن را با کارهایی مانند ORM انجام داده اید ، جایی که ما کنترل کننده هایی را می نویسیم که در ققنوس به مدل ها ، خدمات و غیره اعزام می شود ، زمینه هایی داریم.

زمینه ها گروه بندی های منطقی داده های ما هستند که اعتبار سنجی داده ها ، دسترسی ها و به روزرسانی های ذخیره سازی را مدیریت می کنند. برای آسانتر کردن این فرآیند ، ققنوس از کتابخانه ای به نام ECTO استفاده می کند. ECTO برخی از ماکروها را به ما می دهد که نقشه ساختار داده های ما را به جداول در پایگاه داده ما نقشه می کند. همچنین با استفاده از سازه ای که به عنوان یک تغییر دهنده شناخته می شود ، تغییراتی را در پایگاه داده ما انجام می دهد. در اصل ، تغییرات به ما این امکان را می دهد تا تغییراتی را که در درخواست های مختلف رخ می دهد ، گروه بندی کنیم و قبل از ارتکاب آنها اعتبارسنجی را انجام دهیم. باز هم ، این به نظر می رسد که یک انتزاع غیر ضروری است ، اما قادر به دامنه تغییرات قدرت زیادی به ما می دهد و در از بین بردن مواردی که می توانند طرح/برنامه ما را بشکنند ، واقعاً مفید است. قدرت کامل ECTO و تغییرات فراتر از محدوده این مقاله است. با این حال ، اسناد مربوط به ECTO بسیار کامل و آسان برای درک: https://hexdocs. pm/phoenix/ecto.html

با وجود زمینه های خود ، می توانیم از آنها در کنترل کننده های خود برای جمع آوری/ارکسترات داده ها استفاده کنیم و به نماهای منتقل کنیم. پروژه ای که ما ایجاد کردیم شامل هیچ زمینه ای نیست ، اما آنها در /lib /anatomy_app ساکن هستند. اگر بخواهیم زمینه حساب ایجاد کنیم ، پرونده های زیر را ایجاد می کنیم:

این یک مجموعه فرضی است ، اما در اصل lib/anatomy_app/accains/user. ex یک زمینه کاربر را تعریف می کند که مدیریت داده های خواندن و نوشتن را مدیریت می کند ، و lib/anatomy_app/accounts. ex از این زمینه برای ارکستر دسترسی/خواندن برای کل زمینه استفاده می کندوادسپس این موارد را می توان در کنترلر ما برای واکشی و کار با داده ها استفاده کرد.

ما در پروژه ای که تولید کردیم یک کنترلر واحد ارائه شد و می توان آن را در Lib/Anatomy_App_Web/Controllers/Page_Controller. ex یافت. اگر این پرونده را باز کنیم ، می بینیم که بسیار پراکنده است:

-Code Language-JSX نگهدارنده-DefModule TestWeb. PageController استفاده از TestWeb ،: Controller Def Index (اتصال ، _Params) Do Render (co ، "index.html") پایان پایان

آنچه در اینجا اتفاق می افتد این است که ما به Elixir دستور دادیم تمام عملکردی را که ققنوس برای کنترل کننده ها با بیانیه استفاده ارائه می دهد ، به ارمغان بیاورد. سپس یک شاخص عملکردی را تعریف می کنیم که یک اتصال را می گیرد و آن را به الگوی index.html برای ارائه می دهد. اگر به یاد بیاورید ، در روتر ما ، مسیر فهرست مانند این تعریف شده است:

-Code Language-bash نگهدارنده-دریافت "/" ، PageController ،: index

با دانستن محتوای کنترل کننده ما ، این گفته باید کمی بیشتر حس کند. تمام آنچه گفته می شود این است: "هرگونه درخواست دریافت به"/"را به عملکرد شاخص PageController ارسال کنید."

نمادها/الگوها

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

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

نتیجه

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

Michael Lamb

من به عنوان یک مهندس نرم افزار در آزمایشگاه های Fullstack ، من با استفاده از React Native ، بر روی ساخت راه حل های نرم افزاری سفارشی متمرکز شده ام. من همچنین تجربه کار با Reactjs ، Java Script و HTML را دارم. قبل از آزمایشگاه های Fullstack ، من یک توسعه دهنده بومی React در مشاوره نرم افزار LAMB بودم. من مدرک لیسانس علوم کامپیوتر را از دانشگاه وایومینگ دارم.

ما به دنبال توسعه دهندگان متعهد به نوشتن بهترین کد و استقرار برنامه های بی عیب و نقص در یک تیم کوچک هستیم.

این تنها در مورد نتایج نیست ، بلکه در مورد چگونگی کمک به مشتریان خود به آنجا و به اهداف خود کمک کرده است.

فرآیند گام به گام ما برای طراحی ، توسعه و حفظ راه حل های نرم افزاری استثنایی سفارشی.

بیایید صحبت کنیم!

ما دوست داریم در مورد پروژه شما اطلاعات بیشتری کسب کنیم. درگیری ها از 75000 دلار شروع می شود.

ما وب سایت ها ، برنامه های آیفون و اندرویدی و راه حل های نرم افزاری سفارشی را طراحی و توسعه می دهیم که به همان زیبایی عملکردی هستند.

© 2022 Fullstack Labs ، LLC |کلیه حقوق محفوظ است

محل

21750 بلوار اوک هاردی 104 ، سان آنتونیو ، تگزاس 78258

2221 South Clark St ، طبقه 12 ، آرلینگتون ، ویرجینیا 22202

CRA 53 80 198 Edificio Torre Atlántica Empresarial Piso17 Oficina 114 Barranquilla ، Atlántico ، 080001 < Span> ما به دنبال توسعه دهندگان متعهد به نوشتن بهترین کد و استفاده از برنامه های بی عیب و نقص در یک تیم کوچک هستیم.

فارکس کاران ایران...
ما را در سایت فارکس کاران ایران دنبال می کنید

برچسب : نویسنده : ديناروند فهيمه بازدید : <-PostHit-> تاريخ : جمعه 19 خرداد 1402 ساعت: 14:35