کلاس GetBookingQueryHandler
این کلاس مسئول پردازش درخواستهای دریافت اطلاعات رزرو است. این کلاس از الگوی CQRS پیروی میکند و به عنوان یک Query Handler عمل میکند.
ویژگیهای کلیدی
پردازش دریافت اطلاعات رزرو:
- مدیریت تراکنشها و ذخیرهسازی
- استفاده از الگوی Query Handler برای جداسازی مسئولیتها
Dependency Injection:
- استفاده از DI برای مدیریت وابستگیها
- افزایش تستپذیری و انعطافپذیری
ساختار کد
csharp
internal sealed class GetBookingQueryHandler : IQueryHandler<GetBookingQuery, BookingResponse>
{
private readonly ISqlConnectionFactory _sqlConnectionFactory;
public GetBookingQueryHandler(ISqlConnectionFactory sqlConnectionFactory)
{
_sqlConnectionFactory = sqlConnectionFactory;
}
public async Task<Result<BookingResponse>> Handle(GetBookingQuery request, CancellationToken cancellationToken)
{
using var connection = _sqlConnectionFactory.CreateConnection();
const string sql = """
SELECT
id AS Id,
apartment_id AS ApartmentId,
user_id AS UserId,
status AS Status,
price_for_period_amount AS PriceAmount,
price_for_period_currency AS PriceCurrency,
cleaning_fee_amount AS CleaningFeeAmount,
cleaning_fee_currency AS CleaningFeeCurrency,
amenities_up_charge_amount AS AmenitiesUpChargeAmount,
amenities_up_charge_currency AS AmenitiesUpChargeCurrency,
total_price_amount AS TotalPriceAmount,
total_price_currency AS TotalPriceCurrency,
duration_start AS DurationStart,
duration_end AS DurationEnd,
created_on_utc AS CreatedOnUtc
FROM bookings
WHERE id = @BookingId
""";
var booking = await connection.QueryFirstOrDefaultAsync<BookingResponse>(sql, new { request.BookingId });
return booking;
}
}
نحوه کار
دریافت درخواست:
- دریافت شناسه رزرو برای دریافت اطلاعات
- اعتبارسنجی اولیه دادهها توسط Validator
پردازش درخواست:
- بررسی وجود رزرو
- دریافت اطلاعات رزرو و مدیریت تراکنشها
ذخیرهسازی:
- ذخیره تغییرات با استفاده از UnitOfWork
- بازگرداندن نتیجه در صورت موفقیت
مزایای این طراحی
جداسازی مسئولیتها:
- هر کلاس تنها یک وظیفه مشخص دارد
- رعایت اصل Single Responsibility
قابلیت تستپذیری بالا:
- امکان mock کردن وابستگیها
- تستهای مجزا برای هر بخش
مدیریت خطا:
- استفاده از الگوی Result برای مدیریت خطاها
- بازگشت پیامهای خطای معنادار