
آموزش ساختن یک Fluent Interface در سی شارپ
آموزش ساختن یک Fluent Interface در سی شارپ یکی دیگر از آموزش های گروه آموزشی پرووید می باشد که در این قسمت آن را به شما معرفی می کنیم. این بسته ی آموزشی نیز یکی از دوره های آموزشی دیگر که در حوزه ی فارسی سازی آموزش های انگلیسی تنظیم شده است می باشد. عنوان این بسته ی آموزشی توسعه یک Fluent API در سی شارپ است که با نام اصلی Fluent API Development in C# از شرکت Pluralsight منتشر شده است.
Fluent Interface چیست؟
یک Fluent Interface، در واقع، یک API است که با روش شی گرایی پیاده سازی شده است و به طور ویژه ای به Method Chaining و یا زنجیر کردن متدها، متکی است. هدف یک Fluent Interface کاهش دادن سطح پیچیدگی کد و افزایش قابلیت خوانایی آن می باشد. علاوه بر این موضوع، با استفاده از یک Fluent Interface می توان Domain Specific Language و یا DSL مناسبی نیز تشکیل داد . منظور از زنجیر کردن متدها و یا Method Chaining، تکنیکی است که در آن متدها در دنباله ای که با یکدیگر متصل میشوند، قرار میگیرند. به عبارت دیگر، خروجی هر متد توسط یک محصول دیگر مورد استفاده قرار میگیرد. برای انجام این کار، متدها می بایست Instance هایی از یک کلاس را اصطلاحاً Return کنند. پس از انجام این کار این متدها می توانند با یکدیگر زنجیر شده و در قالب یک جمله تک، مورد استفاده قرار بگیرند. این موضوع باعث میشود تا سطح خوانایی و یا Readability کد به مراتب افزایش پیدا کند. در بسیاری از ابزارهای برنامه نویسی از قبیل LINQ، که برنامه نویسان سی شارپ با آن آشنا هستند استفاده کردن از تکنیک Fluent chaining به طور شفافی دیده میشود. این موضوع باعث میشود تا کاربر بتواند جمله برنامه نویسی ایجاد شده را شبیه به یک جمله انگلیسی ساده خوانده و آن را درک کند.

به این الگو اصطلاحاً زنجیر کردن و یا chaining میگویند. هرچند که Fluent Interface و Method chaining با یکدیگر شباهت های بسیار زیادی دارند، اما تفاوت هایی نیز بین این دو روش موجود است. برای مثال، استفاده کردن از Fluent Interface ها باعث میشود تا برنامه بر روی مجموعه یکسان از داده ها کار کند. این در حالی است که، تکنیک Method chaining به منظور تغییر دادن جنبه های مختلفی از یک Object پیچیده تک، مورد استفاده قرار میگیرد. در استفاده کردن از Fluent Interface، متدها میبایست یک Instance از یک تایپ یکسان را برگرداند. در استفاده از Method chaining این قضیه لزوماً برقرار نیست و مدل ها می توانند Instance هایی از هر کلاس را Return کنند. علاوه بر این، باید توجه کرد که Fluent Interface ها، با استفاده از تکنیک Method chaining پیاده سازی می شود. اما تمامی کاربرد Method chaining در پیاده سازی Fluent Interface ها محدود نمی گردد. هر چند که Method chaining بر روی مجموعه کوچک و ساده از داده ها عمل می کند، Fluent Interface ها اغلب برای تغییر دادن آبجکت های پیچیده تری مورد استفاده قرار می گیرد.
مزایای استفاده از Fluent API در C#
در طراحی APIها، خوانایی کد و نحوه بیان هدف عملیات اهمیت زیادی دارد. Fluent API روشی برای طراحی رابطهای برنامهنویسی است که به توسعهدهنده اجازه میدهد چند فراخوانی متد را به شکلی زنجیرهای پشت سر هم قرار دهد. این الگو میتواند کد را به عباراتی خواناتر تبدیل کند و باعث شود ترتیب عملیات از روی نحوه فراخوانی متدها بهتر قابل درک باشد. در زبان C#، این شیوه طراحی میتواند در ساخت ابزارها و رابطهایی که تنظیمات یا عملیات متوالی دارند، کاربرد داشته باشد.
یکی از مزایای Fluent API این است که میتواند پیچیدگی ظاهری برخی فراخوانیها را کاهش دهد و نحوه استفاده از یک قابلیت را روشنتر کند. البته خوانایی نهایی به طراحی متدها، نامگذاری مناسب و میزان پیچیدگی زنجیره فراخوانیها بستگی دارد. اگر متدها مسئولیتهای مشخصی داشته باشند و ترتیب استفاده از آنها منطقی باشد، رابط ایجادشده میتواند تجربه بهتری برای برنامهنویسان فراهم کند. در مقابل، زنجیرههای بیش از حد پیچیده ممکن است درک و عیبیابی کد را دشوارتر کنند.
تکنیکهای پیادهسازی Fluent API در سی شارپ
برای طراحی یک Fluent API در C#، باید به نحوه تعریف متدها و مقدار بازگشتی آنها توجه کنید. یکی از الگوهای رایج این است که متدها پس از انجام عملیات، مرجع مناسبی را بازگردانند تا امکان فراخوانی متد بعدی در همان عبارت فراهم شود. به این ترتیب، بهجای نوشتن چند دستور جداگانه، میتوان عملیات مرتبط را در قالب یک زنجیره بیان کرد. انتخاب نامهای روشن برای متدها نیز کمک میکند کد نهایی به هدف موردنظر نزدیکتر باشد.

طراحی Fluent API علاوه بر Method Chaining به توجه به ساختار کلی رابط نیاز دارد. باید مشخص باشد کدام عملیات میتوانند پشت سر هم اجرا شوند، چه دادههایی میان مراحل منتقل میشوند و در پایان چه نتیجهای انتظار میرود. همچنین، لازم است رفتار متدها تا حد امکان قابل پیشبینی باشد تا استفاده از API برای برنامهنویسان ساده بماند. رعایت این اصول به ایجاد رابطهایی کمک میکند که هم از نظر ساختار کد منظم هستند و هم در پروژههای مختلف قابلیت استفاده مجدد دارند.
نمونههای Fluent API در دنیای C# و .NET
در اکوسیستم C# و .NET، الگوهای Fluent در APIهای مختلف دیده میشوند. یکی از نمونههای آشنا، استفاده از متدهای زنجیرهای در LINQ است که امکان بیان عملیاتی مانند فیلتر کردن، مرتبسازی و انتخاب دادهها را در یک عبارت فراهم میکند. این شیوه استفاده به برنامهنویس اجازه میدهد مراحل پردازش را به ترتیب کنار هم قرار دهد و ساختار کلی عملیات را بدون نوشتن تعداد زیادی دستور جداگانه مشاهده کند.
بررسی APIهای موجود به شما کمک میکند با شیوه طراحی و استفاده از رابطهای زنجیرهای آشنا شوید و اصول مشترک میان آنها را تشخیص دهید. با مشاهده نحوه نامگذاری متدها، نوع مقادیر بازگشتی و ترتیب فراخوانیها میتوان فهمید که یک API چگونه استفاده مورد انتظار را به برنامهنویس منتقل میکند. این شناخت هنگام طراحی رابطهای اختصاصی در C# مفید است و میتواند به ایجاد کدهایی منجر شود که هم برای توسعهدهنده و هم برای افرادی که بعداً آن را نگهداری میکنند، قابل فهمتر باشند.
بازطراحی کدهای C# با استفاده از Fluent Interface
Refactoring به فرایند بهبود ساختار داخلی کد بدون تغییر عمدی در رفتار مورد انتظار آن گفته میشود. هنگام بازطراحی یک رابط موجود برای تبدیل آن به Fluent API، هدف میتواند سادهتر کردن نحوه فراخوانی عملیات و افزایش خوانایی کد باشد. در این فرایند، باید ابتدا ساختار فعلی و مسئولیتهای متدها را بررسی کنید و سپس تغییرات لازم را بهگونهای انجام دهید که استفاده از رابط برای برنامهنویسان روشنتر شود. توجه به رفتار قبلی کد در طول این تغییرات اهمیت دارد.
تبدیل یک رابط معمولی به Fluent API صرفاً به زنجیرهای کردن فراخوانیها محدود نمیشود؛ بلکه باید بررسی شود که آیا این شیوه واقعاً استفاده از قابلیت موردنظر را سادهتر میکند یا خیر. نامگذاری متدها، ترتیب عملیات و نوع خروجی آنها در کیفیت طراحی نقش دارند. اگر رابط جدید باعث ابهام یا پیچیدگی بیشتر شود، ممکن است الگوی مناسبی برای آن مسئله نباشد. ارزیابی ساختار موجود و بازطراحی هدفمند به شما کمک میکند از Fluent Interface در موقعیتهایی استفاده کنید که بیشترین فایده را برای خوانایی و نگهداری کد دارند.
سرفصل مطالب آموزش ویدئویی ساخت یک Fluent Interface در سی شارپ
فصل اول: مقدمه دوره آموزشی
- خوش آمدگویی
- چه چیزی هایی را باید از قبل بدانید؟
فصل دوم: چرا Fluent اهمیت دارد؟
- تعریف کردن یک Fluent Interface بررسی یک مثال سریع ایجاد کردن Path ها
فصل سوم: بررسی تکنیک ها
- بررسی زنجیر کردن Method ها
- استفاده کردن از Conjunction ها
- اهمیت کار کردن با Generic
- اهمیت حاشیه گذاری
- کار کردن با Extension Method ها
فصل چهارم: بررسی Fluent API های از قبل موجود
- بررسی کردن LINQ بررسی کردن Azure Management بررسی کردن FluentAssertions
فصل پنجم: انجام Refactoring و ایجاد یک Fluent
- مقدمه ای به یک Console Application
- ایجاد کردن نمودار یک Fluent API
- کد نویس کردن یک Fluent API
فصل ششم: جمع بندی
- قدم های بعدی







