ویرگول
ورودثبت نام
وحید چشمی
وحید چشمیســلام، من وحید هستم، چند سالی هست که دستم رو کیبورده و کد میزنم. دوست دارم چیزی که تجربه میکنم رو با شما به اشتراک بزارم.https://youtube.com/@devlife013
وحید چشمی
وحید چشمی
خواندن ۲ دقیقه·۵ سال پیش

Boolean blindness - Application Level Code Smell

اولین نوعی که میتوان در مورد Application Level Code Smell صحبت کرد، Boolean blindness میباشد.

این مورد به این اشاره می کند که اطلاعات بسیار کمی در مورد فانکشنها ارائه شده است که از مقادیر boolean استفاده میکند.

مسئله:

کد زیر را در نظر بگیرید

public void BookConcert(string concert, bool standing) { if (standing) { // Issue standing ticket. } else { // Issue sitting ticket. } }

این متد یک نوع string برای نام کنسرت دریافت می کند و یک boolean برای اینکه شخص در محل کنسرت خواهد ایستاد یا خواهد نشست.

حال کدی که برای رزرو کنسرت باید استفاده کنیم یک نگاه بکنیم.

private void BooleanBlindnessConcertBooking() { var booking = new ProblemCode.ConcertBooking(); booking.BookConcert("Solitary Experiments", true); }

اگر یک برنامه نویس جدید به تیم برنامه نویسی اضافه شود و این متد را مشاهده کند، آیا فکر میکنید که آن شخص میداند که ارسال مقدار true به این متد دقیقا چه کاری انجام میدهد؟ پس میشود گفت که این برنامه نویس اصطلاحا کور شده است، زیرا نمیداند که متد دقیقا چه کاری انجام میدهد، بدین منظور یا باید از IntelliSence کمک بگیرد یا اینکه مکان این متد را پیدا کند و کدهای درون متد را بررسی کند که منظور از standing دقیقا چه چیزی می باشد!

راه حل:

حل این مسئله میتوانید از enum کمک بگیریم و آن را جاگزین boolean کنیم.

internal enum TicketType { Seated, Standing }

بدین صورت که enum تعریف شده دارای دو نوع میباشد، Seated و Standing. حال بیایید دوباره نگاهی به متد BookConcert بیندازیم.

internal void BookConcert(string concert, TicketType ticketType) { if (ticketType == TicketType.Seated) { // Issue seated ticket. } else { // Issue standing ticket. } }

کد زیر نشان میدهد که چگونه می توان از مند جدید refactor شده استفاده کرد.

private void ClearSightedConcertBooking() { var booking = new RefactoredCode.ConcertBooking(); booking.BookConcert("Chrom", TicketType.Seated); }

حال اگر یک برنامه نویس جدید به تیم اضافه شود و نگاهی به این متد بیندازد متوجه خواهد شد که این متد عملیات رزرو را انجام میدهد.

مشاهده ویدیو

برنامه نویسیسی شارپclean codeمعماری نرم افزارپایگاه داده
۴
۰
وحید چشمی
وحید چشمی
ســلام، من وحید هستم، چند سالی هست که دستم رو کیبورده و کد میزنم. دوست دارم چیزی که تجربه میکنم رو با شما به اشتراک بزارم.https://youtube.com/@devlife013
شاید از این پست‌ها خوشتان بیاید