Balancing Coupling in Software Design (2024)
Universal Design Principles for Architecting Modular Software Systems
by Vlad KhononovLearn How Coupling Impacts Every Software Design Decision You Make–and How to Control It
If you want to build modular, evolvable, and resilient software systems, you have to get coupling right. Every design decision you make influences coupling, which in turn shapes the design options available to you. Despite its importance, coupling often doesn’t receive the attention it deserves–until now.
Since the dawn of software engineering, it’s been clear that proper management of coupling is essential for architecting modular software systems. This topic has been extensively researched over the years, but some of that knowledge has been forgotten, and some of it is challenging to apply in this day and age. In Balancing Coupling in Software Design, author Vlad Khononov has built a model that not only draws on this accumulated knowledge, but also adapts it to modern software engineering practices, offering a fresh perspective on modular software design.
With principles grounded in practice, Vlad teaches you not only to navigate the multi-dimensional nature of coupling but also to use coupling as a tool for managing complexity and increasing modularity. And who knows, maybe this book will change the way you think about software design as whole.
- Defines the concept of coupling and the role it plays in system design and architecture
- Explains how coupling can both increase complexity and foster modularity of a system
- Introduces a holistic model that turns coupling into a tool for designing modular software
- Shows how to evolve design decisions to support continuous growth of software systems
- Illustrates the discussed principles with detailed examples based on real-life case studies
Learning Domain-Driven Design (2021)
Aligning Software Architecture and Business Strategy
by Vlad KhononovBuilding software is harder than ever. As a developer, you not only have to chase ever-changing technological trends but also need to understand the business domains behind the software. This practical book provides you with a set of core patterns, principles, and practices for analyzing business domains, understanding business strategy, and, most importantly, aligning software design with its business needs.
Author Vlad Khononov shows you how these practices lead to robust implementation of business logic and help to future-proof software design and architecture. You’ll examine the relationship between domain-driven design (DDD) and other methodologies to ensure you make architectural decisions that meet business requirements. You’ll also explore the real-life story of implementing DDD in a startup company.
With this book, you’ll learn how to:
- Analyze a company’s business domain to learn how the system you’re building fits its competitive strategy
- Use DDD’s strategic and tactical tools to architect effective software solutions that address business needs
- Build a shared understanding of the business domains you encounter
- Decompose a system into bounded contexts
- Coordinate the work of multiple teams
- Gradually introduce DDD to brownfield projects
Scale (2018)
The Universal Laws of Life, Growth, and Death in Organisms, Cities, and Companies Paperback
by Geoffrey WestVisionary physicist Geoffrey West is a pioneer in the field of complexity science, the science of emergent systems and networks. The term “complexity” can be misleading, however, because what makes West’s discoveries so beautiful is that he has found an underlying simplicity that unites the seemingly complex and diverse phenomena of living systems, including our bodies, our cities and our businesses.
Fascinated by aging and mortality, West applied the rigor of a physicist to the biological question of why we live as long as we do and no longer. The result was astonishing, and changed science: West found that despite the riotous diversity in mammals, they are all, to a large degree, scaled versions of each other. If you know the size of a mammal, you can use scaling laws to learn everything from how much food it eats per day, what its heart-rate is, how long it will take to mature, its lifespan, and so on. Furthermore, the efficiency of the mammal’s circulatory systems scales up precisely based on weight: if you compare a mouse, a human and an elephant on a logarithmic graph, you find with every doubling of average weight, a species gets 25% more efficient—and lives 25% longer. Fundamentally, he has proven, the issue has to do with the fractal geometry of the networks that supply energy and remove waste from the organism’s body.
West’s work has been game-changing for biologists, but then he made the even bolder move of exploring his work’s applicability. Cities, too, are constellations of networks and laws of scalability relate with eerie precision to them. Recently, West has applied his revolutionary work to the business world. This investigation has led to powerful insights into why some companies thrive while others fail. The implications of these discoveries are far-reaching, and are just beginning to be explored. Scale is a thrilling scientific adventure story about the elemental natural laws that bind us together in simple but profound ways. Through the brilliant mind of Geoffrey West, we can envision how cities, companies and biological life alike are dancing to the same simple, powerful tune.
Implementing Domain-Driven Design (2013)
by Vaughn VernonImplementing Domain-Driven Design presents a top-down approach to understanding domain-driven design (DDD) in a way that fluently connects strategic patterns to fundamental tactical programming tools. Vaughn Vernon couples guided approaches to implementation with modern architectures, highlighting the importance and value of focusing on the business domain while balancing technical considerations.
Building on Eric Evans’ seminal book, Domain-Driven Design, the author presents practical DDD techniques through examples from familiar domains. Each principle is backed up by realistic Java examples–all applicable to C# developers–and all content is tied together by a single case study: the delivery of a large-scale Scrum-based SaaS system for a multitenant environment.
The author takes you far beyond “DDD-lite” approaches that embrace DDD solely as a technical toolset, and shows you how to fully leverage DDD’s “strategic design patterns” using Bounded Context, Context Maps, and the Ubiquitous Language. Using these techniques and examples, you can reduce time to market and improve quality, as you build software that is more flexible, more scalable, and more tightly aligned to business goals.
Coverage includes
- Getting started the right way with DDD, so you can rapidly gain value from it
- Using DDD within diverse architectures, including Hexagonal, SOA, REST, CQRS, Event-Driven, and Fabric/Grid-Based
- Appropriately designing and applying Entities–and learning when to use Value Objects instead
- Mastering DDD’s powerful new Domain Events technique
- Designing Repositories for ORM, NoSQL, and other databases
Thinking in Systems: A Primer (2008)
by Donella H. MeadowsIn the years following her role as the lead author of the international bestseller, Limits to Growth―the first book to show the consequences of unchecked growth on a finite planet―Donella Meadows remained a pioneer of environmental and social analysis until her untimely death in 2001.
Thinking in Systems is a concise and crucial book offering insight for problem solving on scales ranging from the personal to the global. Edited by the Sustainability Institute’s Diana Wright, this essential primer brings systems thinking out of the realm of computers and equations and into the tangible world, showing readers how to develop the systems-thinking skills that thought leaders across the globe consider critical for 21st-century life.
Some of the biggest problems facing the world―war, hunger, poverty, and environmental degradation―are essentially system failures. They cannot be solved by fixing one piece in isolation from the others, because even seemingly minor details have enormous power to undermine the best efforts of too-narrow thinking.
While readers will learn the conceptual tools and methods of systems thinking, the heart of the book is grander than methodology. Donella Meadows was known as much for nurturing positive outcomes as she was for delving into the science behind global dilemmas. She reminds readers to pay attention to what is important, not just what is quantifiable, to stay humble, and to stay a learner.
In a world growing ever more complicated, crowded, and interdependent, Thinking in Systems helps readers avoid confusion and helplessness, the first step toward finding proactive and effective solutions.
What Every Programmer Should Know About Object-Oriented Design (1995)
by Meilir Page-JonesIf you’re a programmer using C++, Smalltalk, or Eiffel, or if you’re about to migrate to object orientation for the first time, you need to know the most important principles of object-oriented design. For example: In a reliable design, why must a variable’s cone of polymorphism lie within that of a method. Is connascence good or bad? How could the inherited methods of a superclass violate the invariant of a subclass – and how can this be prevented?
Page-Jones answers these questions and more, with characteristic clarity, demystifying the fundamentals of object orientation in a language-independent way. He provides a comprehensive notation for object-oriented design that allows you to depict the design for a whole system or to jot down back-of-the-envelope ideas.
Topics Include
- Encapsulation
- Information Hiding
- State Retention
- Object Identity
- Synchronous and Asynchronous Messages
- Classes and Subclasses
- Inheritance
- Polymorphism
- Genericity
- Reusability
- The Object-Communication Diagram
- States and Transitions
- Connascence
- Class Domains
- Encumbrance
- State Space and Behavior
- Class Cohesion
- Guide to Object-Oriented Terminology
- Object-Orientation in a Historical Context