معماری نرم افزار چیست ؟

در برنامه نویسی flat اشتباهات رایجی که در اکثر برنامه های اتفاق می افتد عبارت است از :

  • task های رایجی که در همه برنامه ها، جدای از کارکردشان  باید انجام شود شامل:
  1. Query زدن به data base
  2. ارسال ایمیل و sms
  3. استفاده از یک web service
  4. چک کردن authentication
  5. Render کردن یک html
  6. و دادن متغیر به javascript و….
  • امنیت : برنامه هایی که بصورت flat نوشته می شود از لحاظ امنیت دچار مشکل هستند و زمان زیادی لازم است تا این مشکل برطرف شود، در حالی که بهترین راه، صرف کردن این مدت زمان، برای تولید برنامه می باشد.
  • در برنامه نویسی flat برخلاف framework ، برنامه نویس خود باید ابزارهایی را جهت بالا بردن بازدهی برنامه تولید کند(مانند cache) که ممکن است در این مرحله برنامه نویس دچار اشتباه شده و با مشکل روبرو شود.
  • Documentation : معمولا برنامه هایی که به صورت flat نوشته می شود فاقد documentation می باشد و برای تفویض پروژه و آموزش آن به افراد و یا تیم های دیگر دشوار است.
  • سیستم به روز رسانی چندان مطلوبی ندارد، همگام با زبان برنامه نویسی ها پیش نمی رود.
  • در این نوع برنامه نویسی active community (تعداد افرادی که بر روی این framework کار می کنند ، کدنویسی کرده و اشکالات آن را برطرف می کنند.) چندان معنا ندارد، یا از همه مهمتر third party نوشتن است، یعنی نوشتن کلاس هایی که به framework اضافه شده و عملیات اضافه تری را انجام دهد.

Pattern های نرم افزار زبان ، تکنولوژی و یا پلاگینی نیست که قابل نصب بر روی برنامه باشد ، بلکه یک قانون است . قراردادی است برای نوشتن برنامه به زبان های متفاوت از قبیل PHP و …… که انواع pattern های نرم افزارعبارت است از:  MVC، HMVC و….

MVC [1]: یکی از مشهورترین pattern های برنامه می باشد که از لهجه های مختلفی ساخته شده است(یعنی می توان به طرق گوناگون دیگری MVC را نوشت).

 

  1. شکل زیر یکی از لهجه های MVC می باشد. (به شیوه های مختلف پیاده سازی MVC، لهجه گفته می شود)در این شکل، یک کاربر وجود دارد که درخواستی را به کنترلر ارسال می کند، کنترلر می تواند به مدل خود دسترسی داشته و از او درخواست کند که data ی مورد نیاز کاربر را آماده کند. ( مثلا کاربر درخواست مشاهده لیست دروس ثبت نام شده را می کند، در اینصورت درخواست کاربر به کنترل ارسال شده و کنترل درخواست را به مدل انتقال می دهد.

مدل از data base یا یک  web service یا یک سرویس دهنده ، اطلاعات خواسته شده را خوانده و با توجه به روشی که در شکل زیر مشاهده می کنید، به view منتقل می کند و view این data دریافتی را برای کاربر به نمایش می گذارد.

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

سمعمولا در این approach که یک approach قدیمی تر است، ذکر شده که مدل همان کار database را انجام می دهد.اما در approach های جدیدتر، تعاریف مختلفی از این مدل شده است که عبارت است :

  1. نام controller به glue(چسب) تغییر کرده است.

به عنوان مثال در برنامه های شما یک سری فعالیت های اصلی انجام می شود، که هر vendor یا سازنده یکی از این فعالیت ها را ارائه می دهد از قبیل: ارسال ایمیل، Query  زدن، تامین امنیت،  چک کردن authentication ، ارسال sms و …..

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

  1. مدل در تعاریف جدید به knowledge تبدیل شده است. اگر برنامه را به عنوان انسان در نظر بگیریم، مدل به عنوان مغز انسان تعریف می شود، یعنی اگر از این برنامه سوالی مطرح شود، برنامه با توجه به مدل خود که شامل یک سری دانش است استفاده کرده و به سوال پاسخ می دهد.
  2. نام جدیدی که برای view تعریف شده template می باشد. به این معنی است که یک ساختاری وجود دارد، که متغیرهایی که در این ساختار قرار می گیرد، را برای کاربر به نمایش می گذارد.

تعریف جدید برنامه با استفاده از MVC ، به این صورت است که یک درخواستی را گرفته و یک سری event را انجام داده و در نهایت یک response ایی را برمی گرداند.

  1. مدل زیر مدل سلسله مراتبی MVC می باشد، که از چند مدل MVC که در کنار یکدیگر کار کنند، تشکیل شده است،

در این مدل، برنامه های تحت وب، مانند یک bundle و یا package ایی می باشند که در خود آن ها مدل و view و controller وجود دارد.به این معنی که در خود آن ها فایل های HTML  و  CSSوجود دارد و خود کارهای data base را انجام می دهند.

این مدل شامل چندین لهجه است.به عنوان مثال در یکی از لهجه ها، یک MVC مادر وجود دارد که بقیه MVC ها را کنترل می کند که این لهجه بر روی وب بیشتر معنی می دهد.

در وب package ها بر روی برنامه  قرار می گیرد(کنترلر بر روی کنترلر برنامه، viewبر روی view برنامه) اما در برنامه های desktop ، package ها با یکدیگر در ارتباطند، به عنوان مثال، کنترلر مدل با کنترلر برنامه در ارتباط است و..

و مدل های دیگر عبارت است از، Model-view-adabter ، Model-view-presenter، Mode view view Model ، observer Pattern، Peresentation-abstraction-control و. Multitier architecture

نکته:در این مدل ها نکته قابل توجه این است که پیچیدگی همیشه بیانگر بهتر بودن مدل نمی باشد و مناسب بودن مدل ها براساس نیاز پروژه تعیین می گردد.

 

[1] Mode-view-controller

اسکرول به بالا