برنامه نویسی سـه لایه - mvc (مهندسی نرم افزار)

  • نویسنده موضوع iReza
  • تاریخ شروع

iReza

کاربر عضو
mvc_diagram.png


سلام. :54:

چندی پیش تاپیکی با عنوان " " ایجاد کردم.

حالا قبل از اینکه اون تاپیک بیاد بالا لازم دونستن توضیحاتی پیرامون مهندسی لایه های نرم افزاری (MVC) بدم که به اندازه مبحث OOP حرفه هست اما فقط توضیحات نه آموزش سریال. (MVC یکـ مفوم پایه داره)

MVC، یا مخفف سه کلمه Model,Controller,View هستند که به سـه لایه مشهور هستند گفته میشه.

در تولید نرم افزارهای تحت وب (Web Applications) و فریم ورک ها (Framworks)(ابزارهایی برای سرعت بخشیدن به فرایند تولید) استفاده میشه که بکار بردن این شیوه اصلا الزامی نیست!

ما در MVC همونطور که در بالا گفته شد سـه لایه داریم، لایه View و Controller و Model که هر کدوم عملیات های کاملا متفاوت رو انجام میدن اما مکمل همدیگه هستند. (عضو دیگر خانواده سـه لایه یعنی Router هم هست)

منطق اصلی (واکنش های نرم افزاری): مفهوم کلمه نرم افزار یاد آور تحلیل اطلاعات هست که قطعا احتیاج به یکـ هسته برای واکنش های ورودی و خروجی داره. به این واکنش ها منطق نرم افزاری گفته میشه که نرم افزار همیشه یک منطق پیش فرض داره.

لایه Model (ارتباطات بین نرم افزار و بانک اطلاعاتی):در این لایه یکسری کد داینامیک قرار میگیرن (تحت شیءگرا OO) که فقط باید ارتباطات با دیتابیس رو فراهم کنن تا ما بتونیم با استفاده از این لایه به دیتابیس دسترسی داشته باشیم و عملیات های خودمون رو با استفاده از این لایه انجام بدیم.

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

لایه View (شکل ظاهری نرم افزار): در لایه View، اطلاعات دریافت شده از روتر (توضیح داده میشه..) و بقیه لایه ها بعد از تحلیل توسط منطق نرم افزار (Controller Layer) به شکل یک داده خروجی در میان. این لایه به هیچ عنوان دارای کد عملیاتی نیست.

روتر Router (ارسال درخواست کاربر به هسته سیستم): در واقع روتر لایه ای هست که به کاربر اجازه میده طبق یک متُد داده هاش رو به هسته سیستم یا همون منطق سیستم (Controller Layer) ارسال کنه.

 
آخرین ویرایش توسط مدیر:

iReza

کاربر عضو
Router

در دنیای MVC ساده ترین مثال موجود، مثال Hello World هست که طبق شیء گرایی انجام میشه (به دلیل اینکه دیتابیس کاربران تنظیمات متغیر داره در کلیه لایه ها از متغیرها محلی استفاده شده)


کد:
 <?php 
class Model { 
    public $text; 

    public function __construct() { 
        $this->text = 'Hello world!'; 
    }         
} 

class View { 
    private $model; 
    private $controller; 

    public function __construct(Controller $controller, Model $model) { 
        $this->controller = $controller; 
        $this->model = $model; 
    } 

    public function output() { 
        return '<a href="mvc.php?action=textclicked">' . $this->model->text . '</a>'; 
    } 

} 

class Controller { 
    private $model; 

    public function __construct(Model $model) { 
        $this->model = $model; 
    } 

    public function textClicked() { 
        $this->model->text = 'Text Updated'; 
    } 
} 


$model = new Model(); 
//It is important that the controller and the view share the model 
$controller = new Controller($model); 
$view = new View($controller, $model); 
if (isset($_GET['action'])) $controller->{$_GET['action']}(); 
echo $view->output(); 
?>
در کلاس Model ما یک متغیر داریم که مقدار Hello World درونش هست (باید به جای این متن یک داده از دیتابیس فراخوانی بشه)

در کلاس View ما به نرم افزار دستور میدیم که به متغیر text در پارامتر انتخابی (یعنی Model) بره و مقدارشو استخراج کنه.

در کلاس Controller ما یک تابع داریم که اطلاعات از روتر که action نام داره (برای مثال index.php?action=action) که در صورتی که برابر با تابع ClickedText باشه خروجی متفاوتی نمایان میشه.

ACTION : به متنی گفته میشه که Controller منطق وجود اون رو تعیین میکنه. (در صورت وجود چه اتفاقی بیافته)

PARAMTER : به متنی گفته میشه که به Model و Controller برای تحلیل و برسی ارسال میشه. ** در این مثال استفاده نشده **

 
آخرین ویرایش توسط مدیر:

iReza

کاربر عضو
HtAccess در مهندسی لایه ها

HtAccess یکی ابزار پر کاربردترین ابزارهای وب سرور APACHE هست که میشه برخی از تنظیمات رو درون اون اعمال کرد.

در MVC یکی از مهمترین نکته ها اینه که افراد به پوشه Application دسترسی نداشته باشن. (وضعیت 403)

بعلاوه لینک های روتر باید کاربرپسند (Usability Link) باشن.

برای اینکه بتونید دسترسی رو به پوشه Application محدود کنید لازم هست کد زیر رو در فایل htaccess. این فولدر قرار بدید:


کد:
deny from all
ErrorDocument 403 /AccessDenied.html
محتویات فایل AccessDenied.html باید یکسری کد استاتیک باشه تا به کاربر توضیحاتی رو پیرامون دسترسی ندادن به این فولدر ارائه بده.

اما لینک ها! فرض کنید شما الان یک پرتال خبری نوشتیده، خب، لینک به چه صورت هستند؟


کد:
index.php?rt=news/id/1
یخورده همچین ناجور نیست؟ بهتره که این لینک رو تبدیل به یک لینک کاربر پسند کنیم!

پس درون فایل htaccess. که داخل فولدر فایل روتر هست این کد رو قرار بدید:


کد:
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?rt=$1 [L,QSA]



** **




 
آخرین ویرایش توسط مدیر:
بالا