چگونه قسمتهای بد بو کد خود را پیدا کنیم (قسمت سوم)

عکس پروفایل نویسنده

@mcseeماکسیمیلیانو کونتیری

من مهندس ارشد نرم افزار هستم که در زمینه طراحی های اعلامی و عاشق SOLID و Agile تخصص دارم.

هنوز بوی کد بیشتری وجود دارد. اجازه دهید مدام رایحه ها را تغییر دهیم. چندین علائم و موقعیت را مشاهده می کنیم که باعث می شوند در کیفیت پیشرفت خود شک کنیم.

بیایید چند راه حل احتمالی را بررسی کنیم.

بیشتر این بوها فقط اشاره به چیزی است که ممکن است اشتباه باشد. آنها قوانین سختگیرانه ای نیستند.

این قسمت III است. قسمت I را می توان در اینجا و قسمت II را در اینجا یافت.

Code Smell 10 – بحث های بسیار زیاد

اشیا or یا عملکردها برای کار کردن به آرگومانهای زیادی نیاز دارند

عکس توسط توبیاس تولیوس بر شل کردن

چالش ها و مسائل

  • قابلیت نگهداری پایین
  • استفاده مجدد کم
  • جفت

راه حل ها

  1. روابط منسجم را بین استدلال ها پیدا کنید
  2. یک “زمینه” ایجاد کنید.
  3. استفاده از الگوی شیject روش را در نظر بگیرید.
  4. از انواع “اساسی” پرهیز کنید: رشته ها ، آرایه ها ، اعداد صحیح و غیره
  5. به اشیا Think فکر کنید.

استثناها

  • عملیات در دنیای واقعی به همکاران نه منسجم نیاز دارد.

کد نمونه

اشتباه

درست

ردیابی

اکثر پرزها هشدار می دهند که لیست آرگومانها خیلی زیاد باشد.

برچسب ها

نتیجه

بحث ها را بگویید و آنها را گروه بندی کنید. همیشه نگاشت های دنیای واقعی را ترجیح دهید. در گروه واقعی چگونگی گروه بندی استدلال ها در اشیا co منسجم را بیابید.

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

Code Smell 11 – طبقه بندی فرعی برای استفاده مجدد از کد

استفاده مجدد از کد خوب است. اما طبقه بندی فرعی یک کوپل استاتیک ایجاد می کند.

عکس توسط براندون گرین بر شل کردن

چالش ها و مسائل

راه حل ها

  1. ترکیب مورد علاقه.

استثناها

  • اگر سلسله مراتب از اصل پیروی کند رفتار می کند مانند پس از آن امن است.

کد نمونه

اشتباه

درست

ردیابی

در زیر طبقه بندی روش های بتنریزی می توان هشدار داد. سلسله مراتب عمیق (بیش از 3 سطح) نیز نشانه ای از طبقه بندی بد است.

برچسب ها

نتیجه

در سیستم های قدیمی بسیار معمول است سلسله مراتب عمیق و غلبه بر روش، ما باید آنها را refactor کنیم و توسط ضروری دلایل و نه دلایل اجرایی.

اطلاعات بیشتر

کد بو 12 – پوچ

برنامه نویسان از Null به عنوان پرچم های مختلف استفاده می کنند. این می تواند به عدم وجود ، مقدار تعریف نشده ، خطا و غیره اشاره کند. چند معنایی منجر به اتصال و خطا می شود.

عکس توسط کورت کوتائاگا بر شل کردن

چالش ها و مسائل

اتصال بین تماس گیرندگان و فرستنده ها.

عدم تطابق میان تماس گیرندگان و ارسال کنندگان.

اگر / سوئیچ / آلودگی مورد.

نول با اشیا real واقعی چند شکل نیست. از این رو Null Pointer Exception

Null در دنیای واقعی وجود ندارد. بنابراین اصل Bijection را نقض می کند

NULL: اشتباه میلیارد دلاری

راه حل ها

  1. از پوچ پرهیز کنید.
  2. برای جلوگیری از این موارد از الگوی NullObject استفاده کنید.
  3. از گزینه های اختیاری استفاده کنید.

استثناها

  • API ها ، پایگاه داده ها و سیستم های خارجی که NULL در آنها وجود دارد.

کد نمونه

اشتباه

درست

ردیابی

بیشتر پرزها می توانند موارد بی فایده را نشان دهند و به ما هشدار دهند.

برچسب ها

نتیجه

پوچ اشتباه میلیارد دلاری است. با این حال ، بیشتر زبان های برنامه از آنها پشتیبانی می کنند و کتابخانه ها استفاده از آن را پیشنهاد می کنند.

اطلاعات بیشتر

NULL: اشتباه میلیارد دلاری

من نمی توانستم در مقابل وسوسه قرار دادن یک مرجع پوچ مقاومت کنم ، فقط به این دلیل که اجرای آن بسیار آسان بود. این منجر به خطاهای بیشماری ، آسیب پذیری و خرابی سیستم شده است که احتمالاً طی چهل سال گذشته یک میلیارد دلار درد و خسارت داشته است.

تونی هوره

40+ پیشنهادات مهندسی نرم افزار قابل تأمل

Code Smell 13 – سازه های خالی

اشیا ناقص باعث مسائل زیادی می شود.

عکس برت جردن در Pexels

چالش ها و مسائل

  • تغییرپذیری
  • اشیا ناقص
  • ناسازگاری بین ایجاد و تنظیم جوهر.
  • تنظیم کننده ها

راه حل ها

  1. ذات شی را در خلقت منتقل کنید.
  2. آیا برای همه واضح است که خرما نباید تغییر شکل دهد؟

مثال ها

برخی از چارچوبهای ماندگاری در زبانهای ساکن تایپ شده به یک سازنده خالی نیاز دارند.

استثناها

  • اشیاless بی حالت همیشه راه حل بهتر از روشهای کلاس استاتیک.

کد نمونه

اشتباه

درست

ردیابی

هر لاینر می تواند به این وضعیت (احتمالی) هشدار دهد.

برچسب ها

نتیجه

همیشه اشیا complete کامل ایجاد کنید.

جوهر آنها را تحمل ناپذیر در طول زمان.

هر شی از بدو تأسیس به ماده معتبر خود احتیاج دارد.

نوشتن یک کلاس بدون قرارداد آن مانند تولید یک قطعه مهندسی (مدار الکتریکی ، VLSI (یکپارچه سازی مقیاس بسیار بزرگ) تراشه ، پل ، موتور …) بدون مشخصات است. هیچ مهندس حرفه ای حتی این ایده را در نظر نمی گیرد.

برتراند مایر

Code Smell 14 – God Objects

جسمی که بیش از حد می داند یا زیاد کار می کند.

عکس توسط فرانسیسکو گیسلتی بر شل کردن

چالش ها و مسائل

راه حل ها

  1. تقسیم مسئولیت ها.
  2. اصل مسئولیت منفرد را دنبال کنید.
  3. قانون پسر پیشاهنگی را دنبال کنید.

مثال ها

استثناها

کد نمونه

اشتباه

درست

ردیابی

لنترها می توانند روش ها را بشمارند و نسبت به آستانه هشدار دهند.

برچسب ها

نتیجه

کتابخانه ها در سال 60 خوب بودند. در برنامه نویسی شی گرا ، ما مسئولیت ها را بین بسیاری از اشیا توزیع خواهیم کرد.

همچنین به عنوان شناخته می شود

اطلاعات بیشتر

Code Smell 15 – پیش شرط های از دست رفته

ادعا ، پیش شرط ، شرط پس از شرط و ناپایدار متحدان ما برای جلوگیری از اجسام نامعتبر هستند. اجتناب از آنها منجر به خطا می شود.

عکس توسط جاناتان چونگ بر شل کردن

چالش ها و مسائل

  • ثبات
  • قرارداد شکنی
  • اشکال زدایی سخت است
  • انسجام بد

راه حل ها

  1. پیش شرط های محکم ایجاد کنید
  2. موارد استثنایی را مطرح کنید
  3. سریع شکست بخورید
  4. برنامه نویسی دفاعی

مثال ها

سازندگان اولین خط دفاعی عالی هستند.

اجسام کم خون فاقد این قوانین هستند.

کد نمونه

اشتباه

درست

ردیابی

یافتن پیش شرط های گمشده دشوار است ، البته با وجود ادعاها و موارد نامطلوب.

برچسب ها

نتیجه

همیشه در مورد یکپارچگی جسم صریح باشید.

ادعاهای تولید را روشن کنید.

حتی اگر مجازات عملکردی به همراه داشته باشد.

یافتن خرابی داده ها و اشیا دشوارتر است.

ناکامی سریع یک برکت است.

شکست سریع فلسفه ، توضیح داده شده

اطلاعات بیشتر

روابط

Code Smell 01 – Anemic Models

نوشتن یک کلاس بدون قرارداد آن مانند تولید یک جز engineering مهندسی (مدار الکتریکی ، VLSI (تراشه بسیار بزرگ مقیاس) تراشه ، پل ، موتور …) بدون مشخصات است. هیچ مهندس حرفه ای حتی این ایده را در نظر نمی گیرد.

برتراند مایر

این مطمئناً آخرین بوها نیستند.

خیلی زود بوی مسیر زباله را ادامه خواهیم داد!

برچسب ها

با هکر نون همراه باشید

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