ساختار توسعه اپلیکیشن و متدهای برنامه نویسی توی زبان های مختلف و فریمورک های مختلف متفاوت هستن اما توی بعضی از اونا میشه این ساختار و یا رویه رو به دلخواه تغییر داد.
تصویر زیر Application Flow Chart فریمورک کدایگنایتر هستش ، این فریمورک رو مثال زدم صرفا به خاطر قدیمی بودن و اینکه توی یه برهه برنامه نویسای زیادی باهاش کار کردن و الآن احتمالا اکثر اون برنامه نویسا سوئیچ کردن سمت لاراول و تمام آزمون و خطاها و تجربیاتشونو آوردن روی این فریمورک.
نظر و تجربه شما درباره اپلیکیشن فلوچارت پروژه های لاراولی چیه؟
به عنوان مثال کتابخونه هایی که خودمون درست میکنیم ، یا پکیج ها و ... نحوه بکارگیری و تعامل این کدها با دیتابیس به چه صورت باشه بهتره؟ مثلا توی
library خودم مدل رو فراخونی کنم یا مستقیم یه اینستانس از orm بسازم و غیره.
بیاین یکم راجع بهش تعامل کنیم ، به نظرم برای برنامه نویسی تمیز و نگهداری آتی پروژه خوبه.
@dinihooman سلام وقتتون بخیر.
ببینید این فلوچارتی که بالا گزاشتید به نظر من بیشتر از این که ساختار پروژه کدایگنایتر رو بگه، داره Request LifeCycle رو تو این فریمورک توضیح میده. Request Lifecycle یعنی این که یک درخواست که به سمت سرورهای ما ارسال میشه، چه پروسههایی رو طی میکنه و در آخر تبدیل به چی میشه و چه نتیجهای به کاربر برمیگرده.
ببینید تا اونجایی که من میدونم Request lifecycle توی برنامههای لاراولی هم خیلی شبیه به همین هست با یکی دو تا تفاوت بزرگ و یک سری تفاوت ریز.
یکی از اصلیترین بخشهای لاراول که خیلی بهش قوت میبخشه و تقریبا اصل کار هست، توی فلوچارت بالا نیست و اون هم Service Provider ها و Service Container ها هستند.
برای چی میگم اصل کار هست ؟
با توجه به مستندات لاراول :
Service providers are truly the key to bootstrapping a Laravel application. The application instance is created, the service providers are registered, and the request is handed to the bootstrapped application. It's really that simple!
توی متن بالا نوشته شده که Service Provider ها کلید اصلی bootstrap کردن یک برنامه لاراولی هستند. بعد از این که یک instance از برنامه درست شد ( با Service Provider ها اگر آشنایی داشته باشید منظور از درست کردن instance از برنامه رو میفهمید ) ، Service Provider ها رجیستر میشن و درخواست کاربر به برنامهی bootstrap شده تحویل داده میشه.
در کل اینجا نمیشه خیلی در این مورد توضیح داد. برای این که ساختار پروژههای لاراول رو بهتر بدونید، به نظر من حتما در این موارد تسلط کافی داشته باشید.
در کل میشه گفت که یک درخواست لاراولی مراحل زیر رو حتما طی میکنه:
۱. همون index.php که همهی درخواستها اول به اون زده میشه.
۲. بعد از اون میرسیم به kernel که دو نوع داره Http و Console که بر اساس درخواستی که میاد، برنامه تشخیص میده که از کدوم باید استفاده کنه. Kernel به صورت کلی مثل محیط مرکزی برنامهی شماست که همهی درخواستها از اون رد میشن. فایل Kernel.php داخل دایرکتوری app هم دقیقا در رابطه با همین مورد هست که شما میتونید مثلا یک سری middleware ها و .. رو در داخل اون فایل تنظیم کنید.
اما فایل Kernel اصلی داخل دایرکتوری Illuminate\Foundation\Http\Kernel
هستش. این فایل خیلی کارا میکنه و توضیح دادنش از این گفتگو خارجه پیشنهاد میکنم حتما یه نگاه کنید ولی مثلا یکی از کارهاش تعریف کردن یک سری bootstraper هست که بعد از رسیدن درخواست به kernel اینها اجرا میشن. این bootstraper ها خیلی کارا میکنند مثلا بخش logging برنامه رو کانفیگ میکنند error handling رو کانفیگ میکنند و خیلی کارهای دیگه که قبل از این که ریکوئست واقعا handle بشه نیاز هست اون اتفاقا بیافته.
یک نگاه اگر به boostraperهای داخل فایل Illuminate\Foundation\Http\Kernel
بندازیم، موارد زیر داخلش هست.
/**
* The bootstrap classes for the application.
*
* @var array
*/
protected $bootstrappers = [
\Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables::class,
\Illuminate\Foundation\Bootstrap\LoadConfiguration::class,
\Illuminate\Foundation\Bootstrap\HandleExceptions::class,
\Illuminate\Foundation\Bootstrap\RegisterFacades::class,
\Illuminate\Foundation\Bootstrap\RegisterProviders::class,
\Illuminate\Foundation\Bootstrap\BootProviders::class,
];
یک مرحله خیلی مهم داخل boostraper های بالا، RegisterProviders هست. در واقع یکی از کارهایی که این فایل انجام میده، رجیستر کردن Service Provider ها هست. در مورد این که کارشون چیه به نظرم اگر یه سرچ بکنید خیلی بهتر به نتیجه میرسید تا توضیحات من xD
با توجه به مستندات لاراول:
Service providers are responsible for bootstrapping all of the framework's various components, such as the database, queue, validation, and routing components. Since they bootstrap and configure every feature offered by the framework, service providers are the most important aspect of the entire Laravel bootstrap process.
و در مرحلهی آخر Dispatch کردن درخواست هست. یعنی وقتی همهی کارهای بالا انجام شد، درخواست با router داده میشه تا dispatch بشه و router هم درخواست رو با استفاده از Controller یا closure انجام میده. ( middleware ها و چیزهای مشابه هم در همین مرحله کاراشون انجام میشه )
modelها، helperها،پکیجها و ... هم که در اون Controller یا closure مورد نظر مورد استفاده قرار میگیرن.
این توضیحات ناقص و بدردنخور من بود امیدوارم به درد دوستان بخوره xD
و در آخر حتما حتما سه تا لینک پایین رو یه نگاه بندازید.
https://laravel.com/docs/7.x/lifecycle
https://laravel.com/docs/7.x/container
https://laravel.com/docs/7.x/providers
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟