All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews.
Every effort has been made in the preparation of this book to ensure the accuracy of the information presented. However, the information contained in this book is sold without warranty, either express or implied. Neither the authors, nor Packt Publishing, and its dealers and distributors will be held liable for any damages caused or alleged to be caused directly or indirectly by this book.
Packt Publishing has endeavored to provide trademark information about all of the companies and products mentioned in this book by the appropriate use of capitals. However, Packt Publishing cannot guarantee the accuracy of this information.
Published by Packt Publishing Ltd.
B3 2PB, UK.
Foreword
We are living in an era where most of the things that we do are getting automated through software. Even though, there is definite trend towards pre-packaged software modules and platforms, there is always a place for custom software development and integration projects. In the Enterprise world, .NET and Java EE are the natural platforms of choice for custom software development and deployments. With Agile software development methods, continuous delivery and Domain-Driven Design dominating the scene, there is a need for standardization and communication about software artifacts in a platform-agnostic manner. In this context, software design patterns becomes a primary tool for such communications.
You have in your hands a book that encompasses more than four decades of collective wisdom amassed by these two authors, as part of their continuous pursuit of knowledge and excellence, in the software engineering and technology consulting arena. What is more significant is the fact that these knowledge representations are a direct reflection of a practitioners mindset; some of those have been undertaken for our organization under our supervision! This is more than a reference book and should be looked at as a handbook for developers who are aspiring to take their skills to the next level and design state-of-the-art systems independently. This is undoubtedly a book that helps unfold many underlying principles that further educate and help one appreciate the various programming paradigms that are in vogue, as I write this foreword.
We have been continuously disrupting and pushing computing limits way beyond CPUs and GPUs over the past five decades. It is quite amazing to see the ground the authors have covered, in terms of contemplating the evolution of software design, patterns and idioms, to help developers create scalable and consistent code. More than coverage, their focus has been on certain aspects of design that help you create well structured (leveraging GoF patterns), scalable (through concurrent and parallel programming) and reliable (through functional and reactive programming) code with some of the .NET platform tools that transcend conventional imperative programming techniques.
At the core, the book deals with how pattern-based software development helps one to write better code. The authors have deliberately crafted the book to convey how various development patterns that are part of different catalogues can be put to use in a coordinated manner to write good quality code in .NET. The book covers how one can use GoF, POSA, DDD, POEAA, and EIP catalogue in the C# programming language.
Praseed and Shine are part of UST Globals Technology Consulting group and have been collaborating professionally for the last ten years. They truly complement each other when it comes to software design and development. Their command over computer science first principles, ability to learn new technologies, appetite for challenges, and passion for software design is truly commendable. This makes their technology leadership invaluable to any professional organization.
Leveraging the core platform features (in this case, .NET) in tandem with industry-standard best practices (in this case, proven design pattern catalogues and idioms) is the need of the hour and becomes a clear differentiator when it comes to delivering high quality, scalable, and consistent code. This clearly is any developers best hedge in the present day's highly volatile technology landscape. I believe the authors have tried their best in articulating this with anecdotes and detailed code samples, and I hope that, after reading this book, you will feel the same way.
Arun Narayanan
COO, UST Global
About the Authors
Praseed Pai is a software engineering/re-engineering professional with good business acumen, technical competency, and software engineering skills. He has presented on various topics in more than two hundred technical events in the last decade and half. His areas of interest include software architecture, design patterns, domain-specific languages, engineering software development, computer graphics, and machine learning. Currently, he is associated with the UST global as a senior solutions architect in their consulting division. He is also the primary force behind the SLANGFORDOTNET compiler infrastructure, which has been ported to VB.NET (CLR), Java (JVM), C++ (LLVM), Python, JavaScript, and Ruby. He lives in the city of Kochi with his wife and two kids.
I would like to start off thanking my co-author Shine Xavier for undertaking this journey along with me. An important acknowledgment goes to my longtime collaborator and friend Shalvin PD, who introduced us to Denim Pinto of Packt. I would like to acknowledge the contributions of Aneesh P Revi, Nikhil Nair, Sarath Soman, Vaisakh Babu, Haridas Nair, John Thomas, Biju Alapat, Joseph Abraham, Shaji P Dayanandan, and members of the Kerala Microsoft Users Group (KMUG) while working on the content of the book.I would like to thank my parents, Mrs. Mohana T Pai and the late K.J. Thrivikrama Pai, who taught me the value of continuous learning. I whole heartedly thank my wife, Sandhya L Kammath, for giving encouragement and taking care of our domestic issues herself, while I was writing this book. Being a developer herself, I could get different perspectives on the content I was writing. Last, but not least, Sidharth Pai and Karthik Pai, my sons, for allowing me to concentrate on the book, by not bothering much with their usual demands!Finally, I thank the wonderful folks at Packt and the two reviewers who helped us to make the book better.