وبلاگ شخصی حامد شیربندی

حامد شیربندی

توسعه دهنده نرم افزار

آخرین مقالات در گروه Design patterns

معرفی پروژه ی سورس باز CorMon، سیستم مدیریت محتوای مبتنی بر Core 2.0 و MongoDB


پروژه ی CorMon یک CMS رایگان و سورس باز برپایه ی  Core 2 و MongoDB می باشد که سورس آن را در این آدرس بر روی Github میتوانید دنبال کنید.
این پروژه تلاش و تمرینی است برای اینکه چگونه یک پروژه را در بستر  Core 2 پیاده کنیم و آن را با دیتابیس های NoSQL از جمله MongoDB و Redis به کار بگیریم.

معماری این پروژه برگرفته از Onion Architecture و نیز ASP.NET Boilerplate می باشد و تا حد امکان طراحی ساده و خوانا در نظر گرفته شده تا مشارکت در توسعه و یا استفاده از آن راحت باشد.

ادامه مقاله

بررسی الگوی Repository

تاریخچه

مطالب در مورد الگوی Repository حتی قبل از انتشار GOF وجود داشته است، David Garlan و Mary Shaw در مقاله ای که با عنوان An Introduction to Software Architecture در سال 1994 منتشر شده راجع به آن صحبت کرده اند.

محبوبیت این الگو  بعد از مقالات و کتابهای معروفی توسط Martin Fowler و Eric Evans شروع شد که در آنها به این الگو پرداخته شده بود. مارتین فاولر در سال 2002 و در کتاب Patterns of Enterprise Application Architecture و نیز اریک ایوانز هم در سال 2004 و در کتاب معروفش یعنی  Domain Driven Design به نقش موثر این الگو در به کار گیری آن در لایه DataAccess اشاره داشته اند.

ادامه مقاله

پیاده سازی الگوی Singleton

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

ادامه مقاله

پیاده سازی الگوی Lazy Initialization

Lazy Initialization یکی از الگوهای بسیار مفید در برنامه نویسی شئ گرا است. سناریوی استفاده از این الگو در برنامه نویسی این است که چطور میتوان یک کلاس را در سطح برنامه استفاده کرد اما نمونه سازی واقعی آن فقط در زمانی رخ دهد که واقعا از آن استفاده کرده باشیم؟
این سناریو شروعی برای پیاده سازی الگوی Lazy Initialization می باشد.خوشبختانه از دات نت 4 به بعد با معرفی کلاس Lazy این موضوع به سادگی قابل پیاده سازی است. کافی ست فقط در لحظه ی تعریف یک شئ، آن را به وسیله ی کلاس Lazy محصور کنیم و سپس در سطح کد زمانی که میخواهیم از آن شئ استفاده کنیم خصوصیت Value آن را مورد استفاده قرار دهیم.
برای مثال فرض کنید یک کلاس به اسم User دارید که خود آن شامل خصوصیت لیستی از کلاس Post است. در حالت عادی زمانی که یک User را واکشی میکنید لیست Post های آن نیز واکشی میشوند اما شاید ما در بدنه ی کلاس در چندین متد که User را واکشی کرده اند هیچ نیازی به لیست Post های آن نداشته باشیم بنابر این لیست Post ها را به صورت Lazy تعریف میکنیم.

ادامه مقاله