skip to main content
Skip header Section
Refactoring to PatternsAugust 2004
Publisher:
  • Pearson Higher Education
ISBN:978-0-321-21335-8
Published:01 August 2004
Skip Bibliometrics Section
Bibliometrics
Skip Abstract Section
Abstract

In 1994, Design Patterns changed the landscape of object-oriented development by introducing classic solutions to recurring design problems. In 1999, Refactoring revolutionized design by introducing an effective process for improving code. With the highly anticipated Refactoring to Patterns, Joshua Kerievsky has changed our approach to design by forever uniting patterns with the evolutionary process of refactoring.This book introduces the theory and practice of pattern-directed refactorings: sequences of low-level refactorings that allow designers to safely move designs to, towards, or away from pattern implementations. Using code from real-world projects, Kerievsky documents the thinking and steps underlying over two dozen pattern-based design transformations. Along the way he offers insights into pattern differences and how to implement patterns in the simplest possible ways.Coverage includes: A catalog of twenty-seven pattern-directed refactorings, featuring real-world code examples Descriptions of twelve design smells that indicate the need for this book's refactorings General information and new insights about patterns and refactoring Detailed implementation mechanics: how low-level refactorings are combined to implement high-level patterns Multiple ways to implement the same pattern-and when to use each Practical ways to get started even if you have little experience with patterns or refactoringRefactoring to Patterns reflects three years of refinement and the insights of more than sixty software engineering thought leaders in the global patterns, refactoring, and agile development communities. Whether you're focused on legacy or “greenfield” development, this book will make you a better software designer by helping you learn how to make important design changes safely and effectively.

Cited By

  1. ACM
    Riemer Y, Nogueira P, Matos S and Borges H RMT: A Semi-Automated Tool for Refactoring Design Patterns Proceedings of the XXXVII Brazilian Symposium on Software Engineering, (77-82)
  2. Flageol W, Menaud É, Guéhéneuc Y, Badri M and Monnier S (2023). A mapping study of language features improving object-oriented design patterns, Information and Software Technology, 160:C, Online publication date: 1-Aug-2023.
  3. ACM
    Altoyan N and Batory D (2022). On Proving the Correctness of Refactoring Class Diagrams of MDE Metamodels, ACM Transactions on Software Engineering and Methodology, 32:2, (1-42), Online publication date: 30-Apr-2023.
  4. Rebai S, Alizadeh V, Kessentini M, Fehri H and Kazman R (2022). Enabling Decision and Objective Space Exploration for Interactive Multi-Objective Refactoring, IEEE Transactions on Software Engineering, 48:5, (1560-1578), Online publication date: 1-May-2022.
  5. ACM
    Silva G, Andrade V, Ré R and Meneses R A Quasi-Experiment to Investigating the Impact of the Strategy Design Pattern on Maintainability Proceedings of the XXXV Brazilian Symposium on Software Engineering, (105-114)
  6. Tang Y, Khatchadourian R, Bagherzadeh M, Singh R, Stewart A and Raja A An Empirical Study of Refactorings and Technical Debt in Machine Learning Systems Proceedings of the 43rd International Conference on Software Engineering, (238-250)
  7. Wirfs-Brock R and Kohls C Elephants, patterns, and heuristics Proceedings of the 26th Conference on Pattern Languages of Programs, (1-15)
  8. ACM
    Nguyen P, Song H, Chauvel F, Muller R, Boyar S and Levin E Using microservices for non-intrusive customization of multi-tenant SaaS Proceedings of the 2019 27th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering, (905-915)
  9. Vassallo C, Grano G, Palomba F, Gall H and Bacchelli A (2019). A large-scale empirical exploration on refactoring activities in open source software projects, Science of Computer Programming, 180:C, (1-15), Online publication date: 1-Jul-2019.
  10. Kim J, Batory D and Gligoric M Code transformation issues in move-instance-method refactorings Proceedings of the 3rd International Workshop on Refactoring, (17-22)
  11. ACM
    Vedurada J and Nandivada V (2018). Identifying refactoring opportunities for replacing type code with subclass and state, Proceedings of the ACM on Programming Languages, 2:OOPSLA, (1-28), Online publication date: 24-Oct-2018.
  12. Han A and Cha S (2018). Two-Phase Assessment Approach to Improve the Efficiency of Refactoring Identification, IEEE Transactions on Software Engineering, 44:10, (1001-1023), Online publication date: 1-Oct-2018.
  13. Wirfs-Brock R Are software patterns simply a handy way to package design heuristics? Proceedings of the 24th Conference on Pattern Languages of Programs, (1-15)
  14. ACM
    Chávez A, Ferreira I, Fernandes E, Cedrim D and Garcia A How does refactoring affect internal quality attributes? Proceedings of the XXXI Brazilian Symposium on Software Engineering, (74-83)
  15. Mongiov M, Pappalardo G and Tramontana E (2017). Specifying and identifying widely used crosscutting concerns, Knowledge-Based Systems, 126:C, (20-32), Online publication date: 15-Jun-2017.
  16. Bafandeh Mayvan B, Rasoolzadegan A and Ghavidel Yazdi Z (2017). The state of the art on design patterns, Journal of Systems and Software, 125:C, (93-118), Online publication date: 1-Mar-2017.
  17. ACM
    Boss B, Tischer C, Krishnan S, Nutakki A and Gopinath V Setting up architectural SW health builds in a new product line generation Proccedings of the 10th European Conference on Software Architecture Workshops, (1-7)
  18. ACM
    Stuurman S, Passier H and Barendsen E Analyzing students' software redesign strategies Proceedings of the 16th Koli Calling International Conference on Computing Education Research, (110-119)
  19. ACM
    Lin Y, Peng X, Cai Y, Dig D, Zheng D and Zhao W Interactive and guided architectural refactoring with search-based recommendation Proceedings of the 2016 24th ACM SIGSOFT International Symposium on Foundations of Software Engineering, (535-546)
  20. ACM
    Ichii M, Shimbara D, Suzuki Y and Ogawa H Refactoring verification using model transformation Proceedings of the 1st International Workshop on Software Refactoring, (17-24)
  21. ACM
    Bernstein M Storyspace 3 Proceedings of the 27th ACM Conference on Hypertext and Social Media, (201-206)
  22. ACM
    Kim J, Batory D, Dig D and Azanza M Improving refactoring speed by 10X Proceedings of the 38th International Conference on Software Engineering, (1145-1156)
  23. Brant J and Steimann F (2015). Refactoring Tools are Trustworthy Enough and Trust Must be Earned, IEEE Software, 32:6, (80-83), Online publication date: 1-Nov-2015.
  24. Hafiz M and Overbey J (2015). Refactoring Myths, IEEE Software, 32:6, (39-43), Online publication date: 1-Nov-2015.
  25. ACM
    Bunke M Software-security patterns Proceedings of the 20th European Conference on Pattern Languages of Programs, (1-17)
  26. Cardoso B and Figueiredo E Co-Occurrence of Design Patterns and Bad Smells in Software Systems Proceedings of the annual conference on Brazilian Symposium on Information Systems: Information Systems: A Computer Socio-Technical Perspective - Volume 1, (347-354)
  27. ACM
    Fenske W and Schulze S Code Smells Revisited Proceedings of the 9th International Workshop on Variability Modelling of Software-Intensive Systems, (3-10)
  28. Dibble C and Gestwicki P (2014). Refactoring code to increase readability and maintainability, Journal of Computing Sciences in Colleges, 30:1, (41-51), Online publication date: 1-Oct-2014.
  29. ACM
    Hall T, Zhang M, Bowes D and Sun Y (2014). Some Code Smells Have a Significant but Small Effect on Faults, ACM Transactions on Software Engineering and Methodology, 23:4, (1-39), Online publication date: 5-Sep-2014.
  30. ACM
    Ge X and Murphy-Hill E Manual refactoring changes with automated refactoring validation Proceedings of the 36th International Conference on Software Engineering, (1095-1105)
  31. ACM
    Kim J, Batory D and Dig D Can undergraduates script their own refactorings? Proceedings of the 2013 ACM workshop on Workshop on refactoring tools, (9-12)
  32. Chalekian P POSDCORB Proceedings of the 20th Conference on Pattern Languages of Programs, (1-20)
  33. Vakilian M, Chen N, Zilouchian Moghaddam R, Negara S and Johnson R A compositional paradigm of automating refactorings Proceedings of the 27th European conference on Object-Oriented Programming, (527-551)
  34. ACM
    Cohen J and Ajouli A Practical use of static composition of refactoring operations Proceedings of the 28th Annual ACM Symposium on Applied Computing, (1700-1705)
  35. ACM
    Mirakhorli M, Mäder P and Cleland-Huang J Variability points and design pattern usage in architectural tactics Proceedings of the ACM SIGSOFT 20th International Symposium on the Foundations of Software Engineering, (1-11)
  36. ACM
    Baar T Improving software engineering education by modeling real-world implementations Proceedings of the 8th edition of the Educators' Symposium, (36-39)
  37. Fontana F, Ferme V and Spinelli S Investigating the impact of code smells debt on quality code evaluation Proceedings of the Third International Workshop on Managing Technical Debt, (15-22)
  38. ACM
    Giunta R, Pappalardo G and Tramontana E AODP Proceedings of the 27th Annual ACM Symposium on Applied Computing, (1243-1250)
  39. ACM
    Griffith I, Wahl S and Izurieta C Evolution of legacy system comprehensibility through automated refactoring Proceedings of the International Workshop on Machine Learning Technologies in Software Engineering, (35-42)
  40. Akiyama M, Hayashi S, Kobayashi T and Saeki M Supporting design model refactoring for improving class responsibility assignment Proceedings of the 14th international conference on Model driven engineering languages and systems, (455-469)
  41. Clavreul M, Mosser S, Blay-Fornarino M and France R Service-oriented architecture modeling Proceedings of the 14th international conference on Model driven engineering languages and systems, (289-303)
  42. ACM
    Smith A and Kulkarni P Localizing globals and statics to make C programs thread-safe Proceedings of the 14th international conference on Compilers, architectures and synthesis for embedded systems, (205-214)
  43. ACM
    Tokunaga M, Yoshida N, Yoshioka K, Matsushita M and Inoue K Towards a collection of refactoring patterns based on code clone categorization Proceedings of the 2nd Asian Conference on Pattern Languages of Programs, (1-6)
  44. ACM
    Kahlout G Implementing patterns with annotations Proceedings of the 2nd Asian Conference on Pattern Languages of Programs, (1-6)
  45. ACM
    Hernandez J, Kubo A, Washizaki H and Yoshiaki F Selection of metrics for predicting the appropriate application of design patterns Proceedings of the 2nd Asian Conference on Pattern Languages of Programs, (1-4)
  46. Baar T and Kumar P Detecting entry points in java libraries Proceedings of the 8th international conference on Perspectives of System Informatics, (42-54)
  47. ACM
    Steimann F and Stolz F Refactoring to role objects Proceedings of the 33rd International Conference on Software Engineering, (441-450)
  48. ACM
    Schäfer M, Sridharan M, Dolby J and Tip F Refactoring Java programs for flexible locking Proceedings of the 33rd International Conference on Software Engineering, (71-80)
  49. ACM
    Tip F, Fuhrer R, Kieżun A, Ernst M, Balaban I and De Sutter B (2011). Refactoring using type constraints, ACM Transactions on Programming Languages and Systems, 33:3, (1-47), Online publication date: 1-Apr-2011.
  50. ACM
    Schaefer M and de Moor O (2010). Specifying and implementing refactorings, ACM SIGPLAN Notices, 45:10, (286-301), Online publication date: 17-Oct-2010.
  51. ACM
    Schaefer M and de Moor O Specifying and implementing refactorings Proceedings of the ACM international conference on Object oriented programming systems languages and applications, (286-301)
  52. ACM
    Köppe C Observations on the observer pattern Proceedings of the 17th Conference on Pattern Languages of Programs, (1-14)
  53. ACM
    Pereira D, Lima G and Kulesza U Architecting and modularizing web information systems using design patterns Proceedings of the 8th Latin American Conference on Pattern Languages of Programs, (1-16)
  54. ACM
    Khatchadourian R and Muskalla B Enumeration refactoring Proceedings of the 25th IEEE/ACM International Conference on Automated Software Engineering, (181-182)
  55. ACM
    Savidis A and Stephanidis C Software refactoring process for adaptive user-interface composition Proceedings of the 2nd ACM SIGCHI symposium on Engineering interactive computing systems, (19-28)
  56. ACM
    Counsell S, Hierons R, Hamza H, Black S and Durrand M Is a strategy for code smell assessment long overdue? Proceedings of the 2010 ICSE Workshop on Emerging Trends in Software Metrics, (32-38)
  57. ACM
    Riehle D Design pattern density defined Proceedings of the 24th ACM SIGPLAN conference on Object oriented programming systems languages and applications, (469-480)
  58. ACM
    Riehle D (2009). Design pattern density defined, ACM SIGPLAN Notices, 44:10, (469-480), Online publication date: 25-Oct-2009.
  59. ACM
    Pérez J and Crespo Y Perspectives on automated correction of bad smells Proceedings of the joint international and annual ERCIM workshops on Principles of software evolution (IWPSE) and software evolution (Evol) workshops, (99-108)
  60. ACM
    Bernardi M and Di Lucca G A role-based crosscutting concerns mining approach to evolve Java systems towards AOP Proceedings of the joint international and annual ERCIM workshops on Principles of software evolution (IWPSE) and software evolution (Evol) workshops, (63-72)
  61. Hafiz M and Johnson R Improving perimeter security with security-oriented program transformations Proceedings of the 2009 ICSE Workshop on Software Engineering for Secure Systems, (61-67)
  62. ACM
    Piveta E, Pimenta M, Araújo J, Moreira A, Guerreiro P and Price R Representing refactoring opportunities Proceedings of the 2009 ACM symposium on Applied Computing, (1867-1872)
  63. ACM
    Abadi A, Ettinger R and Feldman Y Re-approaching the refactoring Rubicon Proceedings of the 2nd Workshop on Refactoring Tools, (1-4)
  64. ACM
    Schulze S, Kuhlemann M and Rosenmüller M Towards a refactoring guideline using code clone classification Proceedings of the 2nd Workshop on Refactoring Tools, (1-4)
  65. ACM
    Şavga I, Rudolf M, Götz S and Aßmann U Practical refactoring-based framework upgrade Proceedings of the 7th international conference on Generative programming and component engineering, (171-180)
  66. ACM
    Welicki L, Yoder J and Wirfs-Brock R The dynamic factory pattern Proceedings of the 15th Conference on Pattern Languages of Programs, (1-7)
  67. ACM
    Khomh F and Guéhéneuc Y DEQUALITE Proceedings of the 15th Conference on Pattern Languages of Programs, (1-7)
  68. Hamza H, Counsell S, Hall T and Loizou G Code smell eradication and associated refactoring Proceedings of the 2nd conference on European computing conference, (102-107)
  69. Guerra E, de Lara J and Díaz P (2008). Visual specification of measurements and redesigns for domain specific visual languages, Journal of Visual Languages and Computing, 19:3, (399-425), Online publication date: 1-Jun-2008.
  70. Olsina L, Rossi G, Garrido A, Distante D and Canfora G Incremental quality improvement in web applications using web model refactoring Proceedings of the 2007 international conference on Web information systems engineering, (411-422)
  71. ACM
    Monteiro M and Aguiar A Patterns for refactoring to aspects Proceedings of the 14th Conference on Pattern Languages of Programs, (1-10)
  72. ACM
    Counsell S and Hierons R Refactoring test suites versus test behaviour Fourth international workshop on Software quality assurance: in conjunction with the 6th ESEC/FSE joint meeting, (31-38)
  73. Tip F Refactoring using type constraints Proceedings of the 14th international conference on Static Analysis, (1-17)
  74. ACM
    Rech J and Schäfer W (2007). Visual support of software engineers during development and maintenance, ACM SIGSOFT Software Engineering Notes, 32:2, (1-3), Online publication date: 1-Mar-2007.
  75. ACM
    Ng T, Cheung S, Chan W and Yu Y Work experience versus refactoring to design patterns Proceedings of the 14th ACM SIGSOFT international symposium on Foundations of software engineering, (12-22)
  76. Kim S and Carrington D A tool for a formal pattern modeling language Proceedings of the 8th international conference on Formal Methods and Software Engineering, (568-587)
  77. ACM
    Cinnéide M and Fagan P Design patterns Proceedings of the 2006 conference on Pattern languages of programs, (1-9)
  78. ACM
    Counsell S, Hassoun Y, Loizou G and Najjar R Common refactorings, a dependency graph and some code smells Proceedings of the 2006 ACM/IEEE international symposium on Empirical software engineering, (288-296)
  79. ACM
    Counsell S, Swift S, Tucker A and Mendes E (2006). Object-oriented cohesion subjectivity amongst experienced and novice developers, ACM SIGSOFT Software Engineering Notes, 31:5, (1-10), Online publication date: 1-Sep-2006.
  80. Juillerat N and Hirsbrunner B FOOD Proceedings of the 2006 conference on New Trends in Software Methodologies, Tools and Techniques: Proceedings of the fifth SoMeT_06, (452-461)
  81. ACM
    Verbaere M, Ettinger R and de Moor O JunGL Proceedings of the 28th international conference on Software engineering, (172-181)
  82. ACM
    Advani D, Hassoun Y and Counsell S Extracting refactoring trends from open-source software and a possible solution to the 'related refactoring' conundrum Proceedings of the 2006 ACM symposium on Applied computing, (1713-1720)
  83. Monteiro M and Fernandes J Towards a catalogue of refactorings and code smells for aspectj Transactions on Aspect-Oriented Software Development I, (214-258)
  84. ACM
    Balaban I, Tip F and Fuhrer R Refactoring support for class library migration Proceedings of the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications, (265-279)
  85. ACM
    Balaban I, Tip F and Fuhrer R (2005). Refactoring support for class library migration, ACM SIGPLAN Notices, 40:10, (265-279), Online publication date: 12-Oct-2005.
  86. ACM
    Henkel J and Diwan A CatchUp! Proceedings of the 27th international conference on Software engineering, (274-283)
  87. ACM
    Monteiro M and Fernandes J Towards a catalog of aspect-oriented refactorings Proceedings of the 4th international conference on Aspect-oriented software development, (111-122)
  88. ACM
    Beznosov K and Kruchten P Towards agile security assurance Proceedings of the 2004 workshop on New security paradigms, (47-54)
  89. ACM
    Rajesh J and Janakiram D JIAD Proceedings of the 6th ACM SIGPLAN international conference on Principles and practice of declarative programming, (227-237)
  90. ACM
    Jones J and Smith R Automated auditing of design principle adherence Proceedings of the 42nd annual Southeast regional conference, (158-159)
  91. ACM
    Zannier C Tool support for refactoring to design patterns Companion of the 17th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications, (122-123)
  92. Maurer F and Martel S (2002). Extreme Programming, IEEE Internet Computing, 6:1, (86-90), Online publication date: 1-Jan-2002.
Contributors

Recommendations

Reviews

Anne Gunn

Kerievsky is an experienced teacher, a founding member of multiple patterns study groups, and a developer. It shouldn't be surprising, then, that his approach to patterns and refactoring is a useful one. This book is beautifully printed, and bound with the trademark double-ribbon bookmarks of high-end Addison-Wesley computing books. But, it reads like a great workbook: the cheap paperbound volumes that get the real work done in many classrooms. The authors' intention is clearly that you should interact with the text, not just read it. The years Kerievsky has spent working with study groups shows. The book flows in a straightforward way through chapter 3; Kerievsky summarizes the current state of the software design and maintenance arts. He reviews the basic concepts of refactoring (separating code cleanup, done in a methodical and test-driven way, from code change and enhancement), and of patterns (the idea that it is important to be able to identify and recognize recurring problem sets, and to be able to apply known solutions that have already been proven successful). After that, if you're interested and diligent, you'll access most of the rest of the material while working through chapter 4: "Code Smells." Each "smell" is an indicator of one or more potential problems in code. Each smell section refers readers to multiple refactorings that might be used to remove that smell from their code. You should find yourself hopscotching back and forth from the smells to specific refactorings in chapters 6 through 11. The book is also intended to act as a workbook for interacting with two seminal books on patterns and refactoring [1,2]. It is definitely a bit odd to pick up one book and have it insist that you keep two other books at your side while you read it, but, in this case, especially in terms of shedding new light on Design patterns [1], the practice works. I wanted to read this book primarily because the premise seemed a bit odd to me. I'm used to associating patterns with design (work done before coding) and refactoring with maintenance (work done after some code has already been written). I've used refactoring extensively to clean up code: simplifying, removing duplication, improving names, and clarifying flow. I hadn't thought of refactoring as a way to push code toward (or away from) a specific pattern. That was shortsighted of me. After all, the subtitle of Refactoring [2] is "improving the design of existing code." If you were going to be improving the design during maintenance, why wouldn't you use some of the same tools that you (try to) use during initial design__?__ The "try to" is important here. The fact is that many of us, while admiring patterns in the abstract, and knowing we should be using them more, find them difficult to apply in practice. We have trouble finding the right pattern, or understanding how to use the ones we do find. Or, we become what Kerievsky calls "patterns happy," and start over-engineering code, using patterns even when simpler constructs would work better. Kerievsky asserts that "good designers refactor in many directions, always with the goal of reaching a better design...I refactor to, towards, and even away from patterns." In fact, the biggest value of this work to me is its approach to explaining and documenting patterns. Ten years after the publication of Design patterns [1], it shouldn't be a surprise (or be sacrilege to say) that someone has come up with an improvement in how to document and describe patterns. I've read and reread the decorator pattern in Design patterns [1], and have just never been able to get it. But Kerievsky's refactoring, called "move embellishment to decorator," finally made the decorator pattern comprehensible. The refactoring itself is not for the faint-hearted; the author spends 22 pages on it. But the first five pages (which include a unified modeling language (UML) sketch, a motivation, and a sidebar discussion of the uses of decorator versus strategy) are as clear as glass. On the other hand, if you are staring at a codebase of a few thousand lines of untamed old code with no unit tests in place (one that is, perhaps, not even object-oriented), this good book is not going to give you much help beyond inspiration. Kerievsky unapologetically assumes that object orientation and unit tests are already in place. Feathers' new book [3] might serve you better. I'm only part of the way through it, but it is aimed more directly at those of us who are down-in-the-trenches in hand-to-hand-combat with old code. Eventually, I think you'll want to own both books. It's just a question of which to get first. Online Computing Reviews Service

Gonzalo Peralta Villavicencio

An approach to reformulating software designs at a low level, by introducing transformations through design patterns, while preserving original behavior, is offered in this book. The first goal is to formalize the procedures for using design patterns to do composite refactorings. The book is intended for readers who are working on new software systems, or maintaining systems already designed or in production. The text will be a valuable source of information, helping readers to create good designs, and to avoid falling into the recurring trap of over-engineering and under-engineering problems. The ideal audience for the book is designers and object-oriented programmers who are interested in improving their development techniques, in order to produce revolutionary design software. Readers will benefit from knowledge of pattern use, since this will afford them a more agile reading of book. This knowledge is not a requirement, however, thanks to the well-presented real-world examples, using unified modeling language (UML), Java, and useful references to other related books. Kerievsky's broad experience in software development, and his commitment to the emerging areas of extreme programming (XP) and agile programming, have resulted in a book that brings together, in a practical and consistent way, the concepts developed in the seminal works Design patterns [1] and Refactoring [2]. In the first four chapters, the author exposes the foundations of his topic, and his motivations to write the book. Basic concepts are defined, as well as the author's ideas about doing refactoring toward and away from patterns. It's very important that readers understand the discussion of code smells in chapter 4, since these reflect signs of a system needing improvements, and are mentioned in the examples later in the book. Chapter 5 introduces a catalog of refactorings to patterns, and defines a common dynamic for their presentation. In spite of the variable need for the application of refactoring, the author recommends a study sequence for better understanding. His catalog includes topics in creation, simplification, generalization, protection, and accumulation, presenting a total of 21 refactorings. Finally, he presents an extra utility topic, including six more useful refactorings. Refactorings with regard to smells during object creation are addressed in chapter 6. Throughout the book, the presentation of each refactoring includes a name section that identifies it; a summary describing the design transformations; a discussion of motivation, explaining why anyone would like to use it; its mechanics, detailing the instructions for applying it; an example, including a real-world case; and variations, mentioning possible mutations. Chapter 7 discusses looking for simplify methods, state transitions, and tree structures by means of simplification. A useful resource to help readers assimilate the purpose of all refactorings is a sidebar in the motivation section, which lists the benefits and liabilities of its application. The author presents a concrete, but at the same time eloquent, summary section, describing the refactoring textually and diagrammatically using UML, and offering the reader a fast vision of what the refactoring does without having to read all of the following sections. In chapter 8, the author presents refactorings with regard to generalization, like the form template method. These refactorings are related to the transformation of specific code to general purpose code. Chapter 9 covers the protection of code. Topics studied include limiting instantiation with singletons, and introducing null objects. Developers using frameworks like adaptive communication environment (ACE) (http://www.cs.wustl.edu/~schmidt/ACE.html) will be quickly comfortable with chapters 7, 8, and 9, gaining an understanding of the motivations designers have to incorporate patterns like template methods, strategy, singleton, observer, and null object into the implementation of a framework. The topic of accumulation is addressed in chapter 10. The primary objective of accumulation is to optimize the code that accumulates information within an object, or across several objects. It isn't necessary to read the book sequentially; it's possible to find references to refactorings in chapters other than the ones in which they are introduced. Some refactorings act like low-level constructions to others that are more sophisticated. All refactorings presented in chapter 11 have this utility. The text seeks to standardize a vocabulary of refactorings, with the goal of producing better software designs, and maintainable code. It would be interesting to see the refactoring approach applied to pattern-oriented software architectures, like those addressed in the Pattern Oriented Software Architectures (POSA) [3,4] series. Online Computing Reviews Service

Access critical reviews of Computing literature here

Become a reviewer for Computing Reviews.