بعد از این درس چه کاری میتوانی انجام بدهی؟
- record و class را درست انتخاب کنی
- interface کوچک طراحی کنی
- وابستگی را از سازنده دریافت کنی
C# را ساده بفهم
C# مثل یک کارگاه مهندسی با قراردادهای روشن است؛ نوعها، کلاسها و interfaceها کمک میکنند اجزای اپ، وبسرویس یا بازی جدا اما هماهنگ کار کنند.
interface را برای هر class بهصورت مکانیکی نساز؛ آن را در مرز تغییر واقعی یا آزمونپذیری معرفی کن.
چرا مهم است؟ برای دادهمحور بودن و برابری مقداری مناسب است.
اولین تمرین تو: یک InMemoryOrderRepository بساز و ثبت موفق و مبلغ نامعتبر را با دو تست مستقل بررسی کن.
از یک مثال کوچک شروع کن
interface را کوچک و بر اساس نیاز مصرفکننده بساز. OrderService فقط به قراردادی برای SaveAsync نیاز دارد. پیادهسازی واقعی دیتابیس و fake تست هر دو میتوانند این قرارداد را اجرا کنند. این جداسازی اصل وابستگی را قابل لمس میکند.
۱. قرارداد را از نیاز استخراج کن
IOrderRepository فقط عملیات لازم سرویس را دارد.
۲. وابستگی را تزریق کن
سازنده repository را دریافت و نگه میدارد.
۳. منطق را تست کن
با fake repository بدون دیتابیس واقعی رفتار را بسنج.
interface را برای هر class بهصورت مکانیکی نساز؛ آن را در مرز تغییر واقعی یا آزمونپذیری معرفی کن.
سه قطعهای که باید بفهمی
Record
برای دادهمحور بودن و برابری مقداری مناسب است.
Interface
قرارداد رفتار را بدون وابستگی به پیادهسازی تعریف میکند.
Dependency injection
وابستگی آماده را از بیرون دریافت میکند و آزمون را ساده میسازد.
ثبت سفارش بدون وابستگی مستقیم به دیتابیس
سرویس سفارش باید بتواند امروز در حافظه و فردا در دیتابیس ذخیره کند؛ قانون ثبت نباید با تغییر محل ذخیره بازنویسی شود.
قطعهها را به ترتیب درست بچین
روی هر قطعه بزن تا وارد پاسخ شود؛ برای برگرداندن دوباره روی آن بزن. با دکمههای جابهجایی هم میتوانی بدون کشیدن و رهاکردن ترتیب را اصلاح کنی.
بررسی ساختار تمرین
این صفحه کامپایلر کامل C# نیست؛ ساختار تمرین را صادقانه بررسی میکند و خروجی مورد انتظار را نشان میدهد. برای اجرای کامل به محیط رسمی همان زبان نیاز است.
یک بخش را تغییر بده و دکمه بررسی را بزن.
راهنماییها مرحلهای هستند؛ اول خودت پیام خطا را بخوان.
یک InMemoryOrderRepository بساز و ثبت موفق و مبلغ نامعتبر را با دو تست مستقل بررسی کن.
این سه اشتباه را انجام نده
service locator و وابستگی پنهان
interface بسیار بزرگ
قرار دادن قانون کسبوکار در repository
با 5 سؤال مطمئن شو که مفهوم را گرفتهای
تزریق سازنده چه مزیتی دارد؟
record برای چه چیزی مناسب است؟
قانون مبلغ مثبت کجا قرار گرفته؟
کدام روش نشان میدهد این درس را واقعاً فهمیدهای؟
کدام رفتار احتمال خطا را در همین موضوع بیشتر میکند؟
فهمیدی، تغییر دادی، نتیجه را توضیح دادی؟
فقط در این صورت درس را کامل کن و سراغ مرحله بعد برو.