
اولین نوعی که میتوان در مورد 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); }
حال اگر یک برنامه نویس جدید به تیم اضافه شود و نگاهی به این متد بیندازد متوجه خواهد شد که این متد عملیات رزرو را انجام میدهد.