ably ably برای هدایت شدن به سایت جدید اینجا کلیک کنید

آموزش برنامه نویسی

آموزش برنامه نویسی وب، اندروید، ویندوز , اسکیوال و...
Tell: 0912 097 5516
| Email: Hello@EduOnline.ir

۱۵ مطلب با موضوع «Analysis and Design Teams» ثبت شده است

الگوهای برنامه نویسی (abstract factory)

بسم الله الرحمن الرحیم

بخش ششم

الگوهای برنامه نویسی

الگوی Abstract Factory

در آموزش قبل با روش Method Factory آشنا شدیم، در این روش با الگوی برنامه نویسی Abstract Factory آشنا خواهیم شد.

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

آموزش Method Factory

در Abstract Factory ما یک Interface اصلی خواهیم داشت که مجموعه ای از Object های وابسته را تعریف می کند. در Abstract Factory ما وظیفه ی تولید هر شی را به Factory مربوطه اش واگذار می کنیم، اینجاست که اگر بعد از مدتی از ما خواسته شود که برنامه را بسط بدهیم تنها با ایجاد یک Factory مشکل را می توانیم حل می کنیم.

روش Abstract Factory برای ایجاد اشیای مرتبط مورد استفاده قرار می گیرد، این روش به دلیل اینکه تمامی اشیا را به صورت واحد طراحی و ایجاد می کند روش Factory of factories نیز خوانده می شود، همانطور که گفته شد در روش Abstract Factory یک interface مسئولیت ایجاد و ساخت اشیاء مرتبط را به عهده دارد.

بر اساس تصویر بالا یک برنامه طراحی شده با استفاده از AbstractFactory دارای 5 قسمت خواهد بود:

AbstractFactory

یک interface می باشد که برای ساخت abstract product مورد استفاده قرار می گیرد.

ConcreteFactory

کلاسی که اینترفیس AbstractFactory را برای concrete products پیاده سازی می کند.

AbstractProduct

AbstractProduct یک interface است که اشیا (product های) ما را تعریف می کند.

ConcreteProduct

ConcreteProduct یک کلاس است که اینترفیس AbstractProduct را برای ساخت  اشیا (product های) پیاده سازی می کند.

Client

Client یک کلاس است که از اینترفیس AbstractFactory و AbstractProduct برای ساخت اشیاء مرتبط استفاده می کند.

ادامه مطلب...

الگوهای برنامه نویسی

بسم الله الرحمن الرحیم

بخش پنجم

الگوهای برنامه نویسی

الگوی Factory

شاید با مفهوم (OCP (Open Close Principle آشنا باشید، OCP یکی از اصول اساسی طراحی سیستم های شی گرا می باشد که بسیاری از ما این اصل را رعایت نمی کنیم. OCP بیانگر این مفهوم می باشد که کدهای  شما باید در برابر تغییر (modification) بسته و در برابر توسعه (extension) باز باشد.

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

یکی از الگوهای طراحی (Design Pattern) که این اصل رعایت کرده، الگوی Factory می باشد. همانطور که در آموزش های قبلی هم گفته شد این الگو جز الگوهای ایجاد اشیا می باشد، از طریق لینک زیر می توانید این مباحث را مطالعه کنید.

آموزش Design Pattern

همانطور که می دانید کلمه Factory به معنای کارخانه است، در این روش کدهای مانند یک کارخانه عمل می کنند، کارخانه ای که وابسته به نیاز مشتری محصولی را در اختیار او می گذارد و ساخت شی محصول را به کلاس­های پایین تر می سپارد و از آوردن کلمه new  در کلاس مشتری خودداری می کند.

مثل همیشه سعی می کنیم مباحث را در قالب یک مثال بیان کنیم.

در این مثال ما قصد داریم یک factory ساده ایجاد کنیم تا با گرفتن یک عدد یکی از شی های دایره، مستطیل، مربع را برای ما ایجاد کند.

شکل بالا نشان دهنده ارتباط بین 3 کلاس با کلاس Shape است، می خواهیم با ارتباط بین این 4 کلاس یک Simple Factory ایجاد کنیم. ابتدا یک interface به شکل زیر ایجاد می کنیم:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Factory
{
    public interface Ishape
    {
        void Draw();
    }
}

حالا کلاس Circle را به صورت زیر پیاده سازی می کنیم:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Factory
{
    class Circle:Ishape
    {
        public void Draw()
        {
            Console.WriteLine("Draw one Circle");
        }
    }
}

ادامه مطلب...

الگوهای طراحی Design Pattern

بسم الله الرحمن الرحیم

بخش چهارم

الگوی طراحی (Design Pattern)

الگو طراحی چیست؟

design pattern چیست؟

Design pattern ها راهکارهایی هستند برای رفع مشکلات طراحی نرم افزار، pattern ها یا همان الگوها باعث می شوند تا کدهای ما قابلیت استفاده مجدد داشته باشند.

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

حال اگر ما به صورت دقیق فعالیت هایی را انجام دهیم که باعث شوند میزان مشکلات ما کم تر شوند بدین معنا خواهد بود که ما از یک سری الگوهای رفتاری یا همان Design pattern استفاده می کنیم.

Design pattern ها یا روش های مختلفی برای حل مشکلات وجود دارد، که طبیعتا هر یک از این روش ها می تواند مشکلات خاصی را حل می کنند، در نتیجه هر تیم نرم افزاری بر اساس مشکلات و پروژه خود یکی از روش های Design pattern را می تواند انتخاب کند، البته می توان روشهای مختلفی را نیز کنار یکدیگر به کار گرفت.

 

کاربرد و هدف الگوهای طراحی

اما الگوهای طراحی بعد از الگو های معماری آمدند و در طراحی زیر سیستم ها، Package  ها و Component ها استفاده می­ شوند و هدفشان ارائه راه حل هایی برای حل مشکلات معمول و تکراری می­ باشد، مشکلاتی مانند:

    مدیریت حافظه

    مدیرت اشاره گرها

    synchronization  and mutual exclusion

    جلوگیری از بن بست (deadlock avoidance)

 

در Design pattern ها مفهومی به نام الگوی معماری (Architectural pattern) وجود دارد، این معماری مشخص کننده ترکیب ساختاری (Structural Arrangement) زیر سیستم های های نرم افزاری و قوانین ارتباطی ببین آنها می باشد.

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

در اینجا سعی می کنیم تا به بررسی الگوهای طراحی از دو دیدگاه بپردازم، یکی تقسیم بندی الگوها از نظر GOF و دیگری از دیدگاه Martin Fowler.

 

ادامه مطلب...

معماری n-layer

بسم الله الرحمن الرحیم

معماری n-layer

بخش سوم

N-Layer

در بخش قبل معماری های نرم افزار  را بررسی کردیم و همچنین معماری سه لایه را بیان کردیم. در این بخش قصد داریم معماری های n-Layer یا معماری های چند لایه ای را بررسی کنیم.

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

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

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

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

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


در طراحی معماری یک نرم افزار می بایست مباحثی را مد نظر قرار داد که برخی از آنها را در این بخش بررسی خواهیم کرد.

ادامه مطلب...

انواع معماری های نرم افزار

بسم الله الرحمن الرحیم

انواع معماری های نرم افزار

بخش دوم

مقدمه

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

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

الگوهای برنامه نویسی

 اگر بخواهم در مورد الگو صحبت کنم در واقع باید بگم یک الگو راه حلی برای حل مسایل است که در گذشته به عنوان بهترین راه حل ارائه شده، الگوها ساختارها و روش (methodology) های کلی ایجاد می­کنند. یک الگو یک abstraction قابل تشخیص است که در موقعیت­ها و برنامه های کاربردی مختلف تکرار شده و متناوبا استفاده می­شود. این موقعیت می­تواند مربوط به ساختار (Structure) باشد که مبین الگوی معماری است و یا توصیفی از رفتار (behavior) نرم افزار باشد که تعریفی از الگوی طراحی است و یا در خصوص یک زبان برنامه نویسی خاص باشد که در این صورت الگوی زبان نام دارد.

الگوهای معماری

ادامه مطلب...

معماری های نرم افزار

بسم الله الرحمن الرحیم

 

معماری های نرم افزار

معماری های نرم افزار

ساخت یک کارخانه نرم افزار

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

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

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

طبیعتا ایجاد یک نظم و قانون برای انجام پروژه ها می تواند منافع زیادی را برای شما داشته باشد که بهتر است برای روشن تر شدن این موضوع چند مورد از آنها را بررسی کنیم:

مزایای استفاده از الگوهای برنامه نویسیx

1- افزایش قابلیت پشتیبانی

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

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

ادامه مطلب...

بررسی و ارزیابی کاربران یک وب سایت

بسم الله الرحمن الرحیم

ارزیابی رفتار کاربران و  ثبت گزارشات

سئو سایت

امروزه با توجه گسترش حوزه نرم افزار و الخصوص وب سایت، بسیاری از تجارت ها، فناوری ها، روابط و فعالیت ها توسط وب سایت ها صورت می گیرد.

این گستردگی و پیشرفت تا حدی رسیده است که حتی کشوری مانند امریکا در حال تغییر پشتوانه خود به داده است!

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

برای جمع آوری داده (Data) و تبدیل آن به دانش (information) می توان از روش های مختلفی استفاده کرد و این روش ها بسیار متنوع و گوناگون هستند و می توانند بر اساس نیاز در زمان و محیط های مختلف مورد استفاده قرار گیرند.

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

ادامه مطلب...

دانلود فایل ها در MVC

بسم الله الرحمن الرحیم

Action ها می تواننند مقادیر مختلفی را بر گردانند در این آموزش قصد داریم نحوه ایجاد یک ActionResult را برای بازگرداندن یک فایل بررسی کنیم.

برای این کار کافی است به صورت زیر عمل کنید

public ActionResult Index()
{
  string path = Server.MapPath(@"~/Images/logo.png");
  return (File(path, contentType: "ABLY", fileDownloadName: "logo.png"));
}

همانطور که مشاهده می کنید بسیار کار ساده ای را در اینجا انجام داده ایم.

پارامتر اول در واقع مسیر و نام و پسوند فایلی است که می خواهید دانلود شود.

پارامتر دوم contentType برای معرفی محتوای فایل به برنامه های دانلود و مرورگر می باشد.

پارامتر سوم که fileDownloadName می باشد در واقع همان نام فایلی است که میخواهید در هنگام دانلود برای کاربر نمایش داده شود.

ادامه مطلب...

بررسی Unity, Castle Windsor, StructureMap و Ninject

بسم الله الرحمن الرحیم

بررسی Unity, Castle Windsor, StructureMap  و Ninject

یک مقایسه سریع بر روی چهار DI و IoC داشتم و ابزارهای Unity, Castle Windsor, StructureMap  و Ninject را با دو سناریو متفاوت بررسی شدند.

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

StructureMap

ادامه مطلب...

معرفی برخی از ابزارهای ALT.Net

بسم الله الرحمن الرحیم

آموزش ابزارهای ALT.Net

این مطلب را برای دوستان تیم طراحی و تست قرار دادم انشالله مفید واقع شود

معرفی برخی از ابزارهای ALT.Net

به ابزارهایی که جهت افزایش کیفیت و ابداع روش های جدید جهت افزایش بهره وری کار تولید می شوند را ALT.NET می گویند.

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

برنامه های آزمایش واحد

NUnit

xNUnit

فریمورک های Mock

Moq

Rhino Mocks

فریمورک های واگذاری مسئولیت (inversion of control)

Ninject

Autofac

ابزارهای کنترل یکپارچه گیفیت نرم افزار که با عنوانContinuous Integration  شناخته می شوند

Cruise Control

Team City

ابزارهای ORM

NHibernate

Subsonic

Entity Framework

توسعه تست محور

بسم الله الرحمن الرحیم

آموزش TDD - توسعه تست محور

این مطلب را برای دوستان تیم طراحی و تست قرار دادم انشالله مفید واقع شود.

توسعه تست محور

برای تست نرم افزار روش های متعددی وجود دارد، من شخصا در پروژه ها از روش Test Driven Development (TDD) یا به عبارتی توسعه تست محور استفاده می کنم  این روش در واقع از تفکر Agile منشات می گیرد.

متاسفانه روش TDD و ابزار های موجود در این روش به خوبی با Asp.net Web Form  سازگار نیست و ولی باز می توان از این روش استفاده کرد.

دو نوع از این ابزار ها را معرفی خواهم کرد:

ابزار های آزمایش واحد (Unit testing tools)

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

اما نکته ای که وجود دارد این است که باید لایه های نرم افزار از هم جدا باشند و در واقع وابستگی به صورت صحیح باشد مبحث وابسگی را قبلا توضیح دادم در صورتی که در این زمینه اطلاعی ندارید مبحث تزریق وابستکی و سایر مباحث Design Pattern را مطالعه نمایید تا بتوانید از این ابزار استفاده نمایید.

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

مخصوصا Asp.net Web Form  کار ها به دلیل ماهیت خود این تکنولوژی ساختار را به گونه ای تعریف می کنند که بیشتر مواقع منطق را در Event ها قرار می دهند! به هر حال.

 

ابزار های خودکار سازی محیط

در واقع این نرم افزارها رفتار کاربر را برای کار با نرم افزار شما شبیه سازی می کنند از این نرم افزار ها نیز می توانید در تکنولوژی های مختلف استفاده کنید ولی به محض تغییر ساختار برنامه یا هر رخداد دیگری که باعث شود در شناسایی نرم افزار تغییری ایجاد شود باید مجددا ساختار جدید را معرفی نمایید.

روش BDD) Behavior Driven Design) یا به عبارتی توسعه رفتار محور آخرین روش موجود برای تست نرم افزار است که این روش نیز زیر مجموعه تفکر Agile است.

تزریق وابستگی و DDD

بسم الله الرحمن الرحیم

 

 آموزش تزریق وابستگی

با توجه به اینکه چندین مطلب در مورد DI قرار دادم اما با توجه به مطلبی با عنوان معرفی متدولوژی DDD که برای دوستان قرار دادم و مثالی را در آن مطرح کردم و تصمیم گرفتم چند نکته جدید در بحث DI را در ادامه مثال مطلب DDD خدمتتان عرض کنم

همه با DI آشنا هستیم (در صورت عدم آشنایی لطفا مطالب قبلی را مطالعه نمایید) در مثال مطرح شده در مطلب DDD کدی به صورت زیر داشتید (پیشنهاد می کنم مطلب مربوطه را با عنوان معرفی متدولوژی Domain Driven Design برای درک هر چه بهتر این مطلب مطالعه فرمایید هر چند در صورت عدم مطالعه آن بحث زیر را متوجه خواهید شد) :

public class Account
{
    public int Id { get; set; }
    public string UserName { get; set; }
    public string Password { get; set; }
}

public class People
{
    public Account account { get; set; }
    public int Id { get; set; }
    public string FullName { get; set; }
    public string NationalCode { get; set; }
}
public class Report { public People people { get; set; } public int Id { get; set; } public string Text { get; set; } public DateTime RegisterDate{ get; set; } }

ادامه مطلب...

متدولوژی Domain Driven Design

بسم الله الرحمن الرحیم

این مطلب را برای دوستان طراح قرار دادم انشالله مفید واقع شود

 

متدولوژی Domain Driven Design

قبل از پرداختن به متدولوژی مربوطه می بایست با چند مبحث آشنا شویم.

Domain Model نمایی کلی از هر آنچه در سیستم می گذرد که قلب یک برنامه MVC است که قسمت های دیگر مثل View,Controller فقط وظیفه ایجاد ارتباط با این قسمت را دارند.

یک Domain Model شامل موارد زیر است:

اجزای سی شارپ مانند کلاس ها، Structها و همانند آنکه در مجموع به آن Domain type گفته می شود.

عملیاتی که در Domain Model انجام می شوند به وسیله متدهایی که در Domain Type تعریف شده اند انجام می پذیرند.

زمانی که نمونه ای از یک Domain Type را که نمایانگر موجودیتی است ایجاد می کنید، در حقیقت در حال ایجاد یک Domain Object هستید.

 

یک روش خوب برای ایجاد Domain Model ایجاد یک پروژه از نوع Class Library  تنها برای Domain Model است بدین ترتیب می توان از قسمت های دیگر پروژه به پروژه ی Domain Model ارجاع داشت.

در Asp.Net MVC  سه قابلیت برای کار با Domain Model وجود دارد:

Model Binding: همان ویژگی که در View از آن استفاده می کنید. (ارسال و دریافت پراپرتی ها به صورت یک مدل)

Model Metadata:روشهایی مانند [Display] که در مدل از آن استفاده می کنید.

Validation: اعتبارسنجی که در مدل انجام می دهید.

 

مدل کردن یک Domain

مدل کردن یک Domain یا Domain Modeling، فرایندی است که در طی آن اهداف و نیازمندی های پروژه شناسایی می شود.

ادامه مطلب...

کار با Ninject

بسم الله الرحمن الرحیم

آموزش dependency injection

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

چرا Ninject مفید است؟
بخش اعظمی از دست آوردهای به وجود آمده در حوزه نرم افزار از نسخه ابتدایی منتشر شده بدست می آید.
بیشتر زمان سرمایه گذاری شده در بخش تحلیل بعد از شروع به کار نرم افزار هزینه می شود.
باعث می شود تغییرات نرم افزار شما بسیار ساده تر انجام شود.

بعد از استفاده spring.net به مدت طولانی در asp.net به دنبال یک روش ساده تر و سریعتر و نه روشی بر پایه تریق وابستگی به صورت xml  بودم. برای برنامه های MVC4 در نهایت به Ninject رسیدم چون رویکرد آن XML ای نیست و ساده است و استفاده از آن راحت است.

چطور تزریق کننده وابستگی را انتخاب کنیم؟
هر تزریق کننده مزایا و معایب خود را دارد و یک سری ویژگی را با خود به همراه دارد.
انتخاب یک تزریق کننده بستگی به مواردی دارد که شما بیشتر نیاز دارید دارد و این موضوع کاملا قابل بررسی است.

Ninject یک تزریق کننده متن باز است که برای NET. به وسیله Nate Kohari تولید شده است و یک سری ابزار مناسب به همراه دارد که همچنین ابزارهایی نیز برای MVC3 در آن قرارداده شده است. به هرحال، اگر شما هم مثل من به دنبال راه جدید هستید Ninject را دوست خواهید داشت.

ادامه مطلب...

Design Patterns و Dependency Injection

بسم الله الرحمن الرحیم

آموزش dependency injection

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

اما این ارتباط در انجام وابستگی می تواند به دلیل اندازه نرم افزار و افزایش پیچیدگی باعث ایجاد ترس شود. یک راه برای کاهش تکثیر وابستگی استفاده از تزریق وابستگی یا به اصطلاح  Dependency Injection  که به صورت مختصر (DI) است که اجازه می دهد یک شی را به یک کلاس تزریق کنید بجای اینکه در کلاس خود شی ایجاد شود، تکثیر وابستگی با تزریق بسیار متفاوت است وقتی یک شی را می سازید تکثیر می کند اما تزریق اینطور نیست کمی اگر صبور باشید آن را نیز فرا خواهید گرفت.

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

برای مثال اگر کلاس Foo یک شی از کلاس Bar بسازد و نمونه ای از کلاس Bar  نیاز به چندین مقدار دهی داشته باشد و برای هر نمونه متفاوت باشد، کلاس های دیگر که نمونه ای از کلاس Bar را می سازند مجبورند نمونه ای  با مقداری یکسان دوباره بسازند! (توضیح دادن آن کمی پیچیده است انشالله در مثال ها بیشتر متوجه خواهید شد.)

توسعه دهندگان کارهای تکراری و خسته کننده ای دارند و هنوز بیشتر توسعه دهندگان کارهایی شبیه رفع وابستگی و ساخت اشیا را به صورت دستی انجام می دهند. وضوح وابستگی می تواند حل کردن وابستگی های یک شی یا نوع را توصیف کند.

ادامه مطلب...
up
ما را در گوگل محبوب کنید