تعداد بازدید: 199

معماری های MVC/HMVC

معماری MVC یک قالب برای پیاده سازی رفتار نرم افزار می باشد که بر پایه Model و Controller و View می باشد. controller همیشه درخواست را می گیرد و پاسخ را ارسال می کند.

پس کنترلر پردازنده اصلی نرم افزار ما و رابط میان کلاینت و سرور می باشد. این پردازنده از اجزای اصلی view و Model برای سرویس دهی استفاده می کند. دیاگرام نحوه رفتار یک سیستم مبتنی برای معماری MVC را در زیر مشاهده می کنید:

 

نحوه کار یک نرم افزار بر پایه معماری MVC

درخواست (Request) و پاسخ (Response) طرف حسابشان در نرم افزار کنترلر می باشد . هیچ گاه هیچ یک از سایر ماژول ها در معماری MVC نباید ارتباط مستقیم با Request یا Response پیدا کند.

در زمان طراحی سناریوی نرم افزار ابتدا ما باید Resource های این نرم افزار را تعیین کنیم . با توجه به این Resource ها Controller ها و اجزای دیگر را بسازیم و در نهایت به عملیات ها بپردازیم.

هر رفتار شامل موارد زیر می باشد:

  • Controller : در این کلاس باید عملیات های اصلی CRUD را انجام دهد . متد های درون آن نباید از این موارد خارج شوند.
  • Controller Logics : هر کنترلر برای پیاده سازی CRUD باید از یک سری Logic استفاده می کند. پس عملیات های کمکی برای CRUD در کنترلر در این کلاس می باشند.
  • Model : عملیات های مربوط پایگاه داده در این کلاس می باشند.
  • view : هر کنترلر برای پاسخ به درخواست گاها از فرمت های نمایش در مرورگر استفاده می کند. اگر لازم باشد که داده با فرمت غیر خام ارسال گردد از این template ها که به صورت کل به آن ها view می گوییم استفاده می کند.

معماری های نرم افزاری یک قالب برای Software Flow یا همان رفتار نرم افزار می باشند و وابسته به زبان برنامه نویسی خاصی نیستند.

Model – ORM

Model یعنی ساختار و ارتباطات پایگاه داده مربوط به هر Resource در قالب یک شئ. در پیاده سازی های مطابق با MVC ما از ORM برای مدل ها استفاده می کنیم.

ORM مخفف Objective Relational Mapping می باشد. یعنی هر ردیف از یک جدول پایگاه داده مربوط به یک شئ از مدل می باشد. ساختار کلاس مدل باید شبیه به جدول پایگاه داده باشد.

یعنی ردیف از جدول نگاشت به یک شئ از کلاس مدل یا به عبارتی هر Column از هر ردیف یک Attribute از یک شئ ساخته شده از روی مدل باشد.

به طور مثال جدول Post را تصور کنید :

در جدول بالا اگر یک پست را یک شئ فرض کنیم ، این شئ ویژگی هایی مانند name, content , category دارد.

پس کلاس مدل Post به شکل زیر تعریف می شود :

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

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

کلاس Model اسکلت اصلی هر Resource می باشد که برای تغییر آن در هر جا باید از دست های model استفاده کرد.

Controller

کنترلر از ویژگی ها و متد های مدل استفاده می کند و درخواست ها را handle می کند. یعنی متد های اصلی هر مدل در کنترل استفاده می شود.

کنترلر اصلی Resource بهتر از متد های بالا تجاوز نکند. می توان برای سایر عملیات های نظیر آن کلاس های مکملی برای کنترلر ساخت.

در پیاده سازی کنترلر ها باید بسته هر عملیاتی که قرار است روی Resource پیاده سازی گردد یک متد برای Handle آن داشته باشیم. گاها Logic های یکسانی به ازای هر یک از متد ها بوجود می آید که باید آن ها را با استفاده از ControllerLogic پیاده سازی کرد.

مثلا فرض کنید شما یک کنترلر با نام postController دارید که یک کلاس مجزا برای آن در نظر گرفته اید با نام Api/postController . منطق های مشترک این دو کلاس را در یک کلاس دیگر قرار می دهید با نام Logics/BookActions که این کار باعث می شود کد شما تمیز باشد و کنترلر شما ساده تر و خوانا تر.

HMVC Architecture

معماری HMVC یک معماری بر پایه MVC ماژولار می باشد که هر Resource را می توان نسبت به بقیه مجزا کرد. یعنی می توان برای هر قسمت از برنامه یک model , view , controller در یک کپسول و به صورت ماژول قابل استفاده در سایر ماژول ها یا حتی سایر نرم افزار ها.

 

ساختار معماری hmvc

پس در این معماری ما هر model , view , controller را یک ماژول یا یک MVC traid در نظر می گیریم و می توانیم برای تکمیل نرم افزار از آن در سایر ماژول های نرم افزار استفاده کنیم.

هر ماژول را در یک دایرکتوری و قابل استفاده در سایر ماژول ها می سازیم. مثلا در نرم افزاری ما ماژول ها را به شکل زیر می چینیم :

سناریوی اجرای نرم افزار در HMVC

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

ترتیب ایجاد هر شئ که یک معجونی از mvc است (یک شئ کنترلر که متد هایی جهت ارتباط با view و model دارد) در مراحل مختلف پشت سر هم می باشد. هر شئ باید بنا به نیاز ساخته شود .

به طور مثال ما در نرم افزاری ماژول های settings و product را داریم. setting وابسته به product است یعنی با توجه به درخواست محصول با شناسه id یک شئ از کنترلر setting ساخته می شود. در زمان ساخت شئ product ما از شئ setting استفاده می کنیم. این یعنی ارتباط و استفاده ماژول product از روی ماژول setting.

توضیحاتی که در بالا داده شد رو می تونیم بهش بگیم سناریوی اجرای یک نرم افزار به ازای یک درخواست خاص و نتیجه (که همون پاسخ است).منظور از ماژول یک ترکیب از Controller , Model , View به ازای product یا setting می باشد.

از هر کلاس میشه بنا به نیاز یک یا چند شئ ساخته بشه . برای صرفه جویی در حافظه اگر یک بار نیاز بود که شئ ساخته بشه ما نباید چند شئ از اون بسازیم. مثلا فرض کنید ماژول setting رو ماژول product یک بار استفاده می کنه . در جایی دیگر ماژول جدیدی نیاز به استفاده از شئ setting است. باید از همان مقدار که در قبل ساخته شده استفاده کنه. (مگر نیاز باشه از یک شئ جدید با ویژگی های جدید بسازیم).

handle کردن این موضوع که اشیا باید cash بشوند گاها می تواند بر عهده برنامه نویس نرم افزار باشد. گاها سرور ها خودشان این عملیات cashing را انجام می دهند. ساخت مجدد شئ در برخی موارد اجرای duplicate برخی کد ها را به دنبال دارد که این موضوع یک باگ برای نرم افزار شما به حساب می آید.

مطالب مشابه

composer یک ابزار رابط خط فرمان (command line interface) برای مدیریت و نصب پروژه های PHP می باشد. بوسیله آن می توان روی پروژه خود پکیج هایی (پروژه ها یا کتابخانه ها) را نصب کنید یا بالعکس پروژه خود را قابل نصب بر روی پروژه های دیگر کنید.

Composer (قسمت اول)

composer یک ابزار رابط خط فرمان (command line interface) برای مدیریت و نصب پروژه های PHP می باشد. بوسیله آن می توان روی...

ساخت REST API با PHP

API (Application Program Interface) یعنی یک واسط برای استفاده از امکانات نرم افزار. واسط های گرافیکی نرم افزار رو هم می...

اشتراک گذاری :

مدیر وب سایت گنوتک . برنامه نویسی رو با زبان C در هفده سالگی شروع کردم . در حال حاضر به برنامه نویسی php برپایه معماری MVC , HMVC و همچنین سیستم مدیریت محتوای WordPress و فریم ورک محبوب لاراول علاقه مند هستم و دوست دارم اطلاعاتم رو با شما به اشتراک بگذارم.

۰ دیدگاه برای معماری های MVC/HMVC

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *