Adaptive Code: Agile coding with design patterns and SOLID principles, 2nd Edition
عنوان این کتاب، کد انطباق پذیر است که شرح خوبی از نتیجهی حاصل از به کارگیری اصول موجود در این کتاب است که عبارت از: توانایی کد برای انطباق با هر نیازمندی جدیدی یا سناریوهای پیش بینی نشده بدون نیاز به دوباره کاری قابل توجه. هدف این کتاب جمع آوری تعداد زیادی از بهترین شیوههای موجود در دنیای برنامه نویسی #C با NET Framework. مایکروسافت است. اگرچه بعضی از مطالب این کتاب در سایر کتابها نیز پوشش داده شده اند، اما آن کتابها بیشتر بر روی تئوری تمرکز کرده اند و یا مخصوص توسعه NET. نیستند.
برنامه نویسی میتواند فرآیندی آهسته باشد. اگر کدتان انطباق پذیر باشد، شما قادر خواهید بود تا آن را سریع تر، سادهتر و با اشکال کمتری تغییر دهید نسبت به وقتی که بر روی کدی کار میکنید که مانع تغییرات میشود. همان طور که هر توسعه دهنده ای میداند نیازمندیها مشمول تغییرات هستند. این که این تغییرات چگونه مدیریت شوند، فاکتوری کلیدی است که بین پروژههای نرم افزاری موفق و شکست خورده تفاوت ایجاد میکند. توسعه دهندگان به تغییرات نیازمندیها میتوانند با دو دیدگاه متفاوت واکنش نشان دهند، که در ادامه آمده است.
اول؛ توسعه دهندگانی هستند که میتوانند سفت و سخت باشند. در این رویکرد از فرآیند توسعه تا طراحی کلاس، پروژه به همان اندازه ای غیر قابل انعطاف است که اگر در 50 سال گذشته با کارتهای پانچ پیاده سازی شده بود. متدولوژیهای آبشاری در اطمینان از این که نرم افزار آزادانه تغییر نمیکند مجرمان آشکاری هستند. هدفشان این بود که فازهای آنالیز، طراحی، پیاده سازی و تست کردن باید متمایز باشند و تغییر دادن در نیازمندیها پس از شروع پیاده سازی برای مشتریان سخت یا حداقل گران تمام شود. در نتیجه، کد برای تغییرات ساخته نمیشد؛ در حقیقت این فرآیند همه چیز را ممنوع میکند.
دوم؛ توسعه دهندگانی هستند که میتوانند انطباق پذیر باشند. فرآیندهای چابک فقط به عنوان جایگزینی برای متدولوژیهای سفت و سخت نیستند، بلکه واکنشی به آنها هستند. هدف آنها در آغوش گرفتن تغییرات به عنوان بخشی از قرارداد بین توسعه دهنده و مشتری است. اگر مشتریان میخواهند چیزی را در محصولی که برایش پول پرداخت میکنند تغییر دهند، هزینههای زمانی و مالی باید با اندازه تغییرات مرتبط باشد و نه به فاز فرآیندی که در حال حاضر در حال انجام است. بر خلاف مهندسی فیزیکی، مهندسی نرم افزار با ابزاری قابل انعطاف کار میکند: سورس کد. آجرها و ملات که یک خانه را تشکیل میدهند به معنای واقعی کلمه در مرحلهی ساخت با هم ترکیب شده اند. هزینههای مربوط به تغییر طراحی یک خانه لزوما با مرحلهی تکمیل ساخت مرتبط است. اگر پروژه هنوز آغاز نشده است و هنوز فقط بر روی نقشه است، تغییرات تقریبا ارزان هستند. اگر پنجرهها کار گذاشته شده، سیم کشیهای برق انجام شده و لولهها کار گذاشته شده اند، انتقال حمام از طبقه بالا به طبقه پایین کنار آشپزخانه فوق العاده گران تمام میشود. اما با کد، جابه جا کردن امکانات و تغییر بر روی ناوبری رابط کاربری آن قدرها هم هزینه بر نیست. متاسفانه موضوع همیشه این طوری هم نیست. تنها هزینههای زمانی اغلب این تغییرات را ممنوع میکند و این به طور عمده ناشی از فقدان سازگاری در کد است.
Write code that can adapt to changes.
By applying this book’s principles, you can create code that accommodates new requirements and unforeseen scenarios without significant rewrites. Gary McLean Hall describes Agile best practices, principles, and patterns for designing and writing code that can evolve more quickly and easily, with fewer errors, because it doesn’t impede change.
Now revised, updated, and expanded, Adaptive Code, Second Edition adds indispensable practical insights on Kanban, dependency inversion, and creating reusable abstractions. Drawing on over a decade of Agile consulting and development experience, McLean Hall has updated his best-seller with deeper coverage of unit testing, refactoring, pure dependency injection, and more.
Master powerful new ways to:
Write code that enables and complements Scrum, Kanban, or any other Agile framework
Develop code that can survive major changes in requirements
Plan for adaptability by using dependencies, layering, interfaces, and design patterns
Perform unit testing and refactoring in tandem, gaining more value from both
Use the “golden master” technique to make legacy code adaptive
Build SOLID code with single-responsibility, open/closed, and Liskov substitution principles
Create smaller interfaces to support more-diverse client and architectural needs
Leverage dependency injection best practices to improve code adaptability
Apply dependency inversion with the Stairway pattern, and avoid related anti-patterns
About You
This book is for programmers of all skill levels seeking more-practical insight into design patterns, SOLID principles, unit testing, refactoring, and related topics. Most readers will have programmed in C#, Java, C++, or similar object-oriented languages, and will be familiar with core procedural programming techniques.
Table of Contents
PART I: AGILE DEVELOPMENT FRAMEWORKS
Chapter 1 Introduction to Scrum
Chapter 2 Introduction to Kanban
PART II: FOUNDATIONS OF ADAPTIVE CODE
Chapter 3 Dependencies and layering
Chapter 4 Interfaces and design patterns
Chapter 5 Testing
Chapter 6 Refactoring
PART III: SOLID CODE
Chapter 7 The single responsibility principle
Chapter 8 The open/closed principle
Chapter 9 The Liskov substitution principle
Chapter 10 Interface segregation
Chapter 11 Dependency inversion
PART IV: APPLYING ADAPTIVE CODE
Chapter 12 Dependency injection
Chapter 13 Coupling, cohesion, and connascence
Appendix: Adaptive tools