Tuesday, February 28, 2012

Software Design Trilogy - Part III: Domain Driven Design for RoR Apps

I just gave a talk at Groupon's Geekfest titled:

Software Design Trilogy III - Domain Driven Design for RoR Apps: When Controllers and ActiveRecords Won't Cut It Anymore
You may check out Part II over here.

Here is the abstract of the talk:

Software development is not just about translating business requirements into a static software design. It is about ensuring that in the long run, the system can evolve with the business needs and facilitate communication between business people and developers around the business domain in order to quickly and accurately add or modify features. This requires superb knowledge crunching and domain modeling skills.

Domain Driven Design is an approach that Eric Evans popularized in the mid 2000s to address these concerns. It is a process that centers design of software around the business domain emphasizing the following techniques:

  • Domain Modeling and The Ubiquitous Language
  • Model Driven Design with Building Blocks
  • Refactoring Toward Deeper Insight and Supple Design
  • Large Scale Structures, Bounded Contexts, and Domain Distillation

This presentation will cover an example business domain to guide the attendees through several of the topics and ideas in the Domain Driven Design approach. Additionally, there will be a few code examples to illustrate some of the ideas as applied in a Ruby on Rails application, such as how to go beyond just a basic MVC architecture with Model Driven Design.

Domain Driven Design can help in the long run improve large scale code design inspired by the business domain, and enhance developer communication and collaboration with the business stakeholders. Attendees should walk out with a basic understanding of how abstract concepts from Eric Evans' Domain Driven Design book can be applied on an actual project in the enterprise.

And here are the slides: This concludes the Software Design Trilogy. Hope you enjoyed the learning.

No comments: