اشتراکها
اشتراکها
Bootstrap v4.6.0 منتشر شد
اشتراکها
Bootstrap Icons v1.3.0 منتشر شد
اشتراکها
1.3 TailWind CSS منتشر شد
اشتراکها
AutoMapper 6.2.0 منتشر شد.
A couple of big features in this release include inline maps, where AutoMapper no longer requires you to call CreateMap
for new maps.
اشتراکها
jQuery 3.7.0 منتشر شد
اشتراکها
Visual Studio 2017 15.5.7 منتشر شد
Team Explorer support for TLSv1.2
- We have updated the Git and the Git Credential Manager components that ship in Visual Studio.
- The optional Git for Windows component has also been updated.
- This update allows Git to connect to services that have deprecated support for TLSv1 and TLSv1.1 in favor of TLSv1.2.
Issues Fixed in this Release
These are the customer-reported issues addressed in this release:
- Projects targeting .NET Core 2.1 or newer are not supported by Visual Studio 2017 version 15.5.
- Fixed issue where installation of the SDK for .NET Core 2.1 or newer would cause the option to create ASP.NET Core 2.0 Web applications to disappear.
اشتراکها
Visual Studio 2022 17.2 منتشر شد
This release brings continued improvements to the C# and .NET experiences, new Git performance and experiences, updates for C++ developers, and new Azure tools for local development and deployment. We also continue to address your direct feedback submitted via Developer Community, addressing over 400 feedback items in this release! You can see the broader list of community feedback addressed in releases by visiting the fixes page on Developer Community.
قبل از آشنایی با الگوی Adapter،ابتدا با تعریف الگوهای ساختاری آشنا میشویم که به شرح ذیل میباشد:
سادگی کد، روش Class Adapter را قابل درک مینماید،نکته مهم در کد بالا،متد Request در کلاس Adapter و نحوه فراخوانی متد SpecificationRequest در آن میباشد.
برای درک تفاوت Class Adapter و Object Adapter ، پیاده سازی کلاس Adapter را مشاهده نمایید، که در کد بالا به جای Inherit نمودن از کلاس Adaptee ، آبجکت آن را ایجاد نمودیم. واضح است که Object Adapter انعطاف پذیرتر نسبت به Class Adapter میباشد.
الگوهای ساختاری (Structural Patterns):
از الگوهای ساختاری برای ترکیب کلاسها و اشیاء (Objects)،در جهت ایجاد ساختارهای بزرگتر استفاده میشود.به بیان سادهتر الگوهای ساختاری با ترکیب کلاسها و آبجکتها،قابلیتهای کلاسهای غیر مرتبط را در قالب یک Interface(منظور ظاهر) در اختیار Client (منظور کلاس یا متد استفاده کننده میباشد) قرار میدهند.الگوهای ساختاری با استفاده از ارث بری به ترکیب Interfaceها پرداخته و آنها را پیاده سازی مینمایند.
استفاده از الگوهای ساختاری برای توسعه کتابخانه هایی (Library) که مستقل از یکدیگر میباشند،اما در کنار هم مورد استفاده قرار میگیرند،بسیار مفید است.
در ادامه به الگوی Adapter که یکی از الگوهای ساختاری است،می پردازیم.الگوی Adapter انواع مختلفی دارد که فهرست آنها به شرح ذیل میباشد:
1- Pluggable Adapter - 4 Two way Adapter- 3 Object Adapter - 2 Class Adapter
در این مقاله Class Adapter و Object Adapter را مورد بررسی قرار میدهیم و اگر عمری باقی باشد در مقاله بعدی Two-way Adapter و Pluggable Adapter را بررسی میکنیم.
قبل از پرداختن به هر یک از Adapterها با یکسری واژه آشنا میشویم،که در سرتاسر مقاله ممکن است از آنها استفاده شود.
Interface: منظور از Interface در اینجا، ظاهر یا امکاناتی است که یک کلاس میتواند ارائه دهد.
Client: منظور متد یا کلاسی است که از Interface مورد انتظار،استفاده مینمایید.
Intent (هدف)
هدف از ارائه الگوی Adapter ،تبدیل Interface یک Class به Interface ی که مورد انتظار Client است، میباشد.در واقع الگوی Adapter روشی است که بوسیله آن میتوان کلاسهای با Interface متفاوت را در یک سیستم کنار یکدیگر مورد استفاده قرار داد. به بیان سادهتر هرگاه بخواهیم از کلاسهای ناهمگون یا نامنطبق (کلاسهای غیر مرتبط) در یک سیستم استفاده کنیم،راه حل مناسب استفاده از الگوی Adapter میباشد.
Adapter را به عنوان Wrapper میشناسند.الگوی Adapter از سه Component مهم تشکیل شده است،که عبارتند از: Target،Adapter و Adaptee.
Target:کلاس یا Interface ی است که توسط Client مورد استفاده قرار میگیرد، و Client از طریق آن درخواستهای خود را بیان میکند. در واقع Functionality موجود در کلاس Target به جهت پاسخگویی به درخواستهای Client فراهم گردیده است.
Adaptee: کلاسی است، دارای قابلیتهای مورد نیاز Client بطوریکه Interface اش با Interface مورد انتظار Client (یعنی Target)سازگار نیست. و Client برای استفاده از امکانات کلاس Adaptee و سازگاری با Interface مورد انتظارش نیاز به یک Wrapper همانند کلاسAdapter دارد.
Adapter: کلاسی است که قابلیتها و امکانات کلاس Adaptee را با Interface مورد انتظار Client یعنی Target سازگار میکند، تا Client بتواند از امکانات کلاس Adaptee جهت رفع نیازهای خود استفاده نماید. به بیان سادهتر Adapter کلاسی هست که برای اتصال دو کلاس نامتجانس (منظور دو کلاسی که هم جنس نمیباشند یا از نظر Interface بطور کامل با یکدیگر غیر مرتبط هستند) مورد استفاده قرار میگیرد.
در ادامه به بررسی اولین الگوی Adapter یعنی Class Adapter میپردازیم:
Class Adapter:
در این روش کلاس Adapter از ارث بری چند گانه استفاده میکند و Interface مرتبط به Adaptee را به Interface مرتبط به Target سازگار مینماید.
برای درک تعریف بالا مثالی را بررسی میکنیم، در ابتدا شکل زیر را مشاهده نمایید:
در شکل ملاحظه میکنید، متد SpecificationRequet واقع در Adaptee میتواند نیاز Client را برطرف نماید، اما Client،چیزی را که مشاهده میکند اینترفیس Itarget میباشد، به عبارتی Client بطور مستقیم نمیتواند با Adaptee ارتباط برقرار کند، بنابراین اگر بخواهیم از طریق Itarget نیاز Client را برطرف نماییم، لازم است کلاسی بین Itarget و Adaptee به جهت تبادل اطلاعات ایجاد کنیم، که Adapter نامیده میشود. حال در روش Class Adapter، کلاس Adapter جهت تبادل اطلاعات بین ITarget و Adaptee هر دو را در خود Implement مینماید، به عبارتی از هر دو مشتق (Inherit) میشود.
در ادامه شکل بالا را بصورت کد پیاده سازی مینماییم.
class Adaptee { public void SpecificationRequest() { Console.WriteLine("SpecificationRequest() is called"); } }
interface ITarget { void Request(); }
class Adapter:Adaptee, ITarget { public void Request() { SpecificationRequest(); } }
class MainApp { static void Main() { ITarget target = new Adapter(); target.Request(); Console.ReadKey(); } }
شکل زیر که از سایت Wikipedia گرفته شده است،به خوبی نحوه فراخوانی را مشخص مینماید:
روش Object Adapter:
می دانیم در زبان برنامه نویسی #C هر کلاس فقط میتواند از یک کلاس دیگر Inherit شود، به طوری که هر کلاس نمیتواند بیش از یک کلاس Parent داشته باشد، بنابراین اگر Client شما بخواهد از امکانات و قابلیتهای چندین کلاس Adaptee استفاده نماید، روش Class Adapter نمیتواند پاسخگوی نیازتان باشد، بلکه میبایست از روش Object Adapter استفاده نمایید.
شکل زیر بیانگر روش Object Adapter میباشد:
همانطور که در شکل ملاحظه میکنید، در این روش کلاس Adapter به جای Inherit نمودن از کلاس Adaptee، آبجکتی از کلاس Adaptee را در خود ایجاد مینماید، بنابراین با این روش شما میتوانید به چندین Adaptee از طریق کلاس Adapter دسترسی داشته باشید.
پیاده سازی کدی شکل بالا به شرح ذیل میباشد:
class Adaptee { public void SpecificRequest() { MessageBox.Show("Called SpecificRequest()"); } }
interface ITarget { void Request(); }
class Adapter: ITarget { private Adaptee _adptee = new Adaptee(); public void Request() { _adptee.SpecificationRequest(); } }
class MainApp { static void Main() { ITarget target = new Adapter(); target.Request(); Console.ReadKey(); } }
امیدوارم مطلب فوق مفید واقع شود
اشتراکها
Bootstrap 4.4.0 منتشر شد
- New responsive containers! Over a year in the making, fluid up to a particular breakpoint, available for all responsive tiers.
- New responsive
.row-cols
classes for quickly specifying the number of columns across breakpoints. This one is huge for those of you who have asked for responsive card decks.