Skip to content

Latest commit

 

History

History
115 lines (76 loc) · 7.37 KB

README.md

File metadata and controls

115 lines (76 loc) · 7.37 KB

What's this for?

During a V-Day in summer 2013, Raj articulated a vision of the VersionOne platform growing to service the needs of 1 million plus users. He emphasized that the platform architecture, and the overall business model, will have to adapt to accomplish this.

One of the first steps in growing our platform capabilities is for us to collectively increase our knowledge about and experience with building highly scalable app architectures.

So, use this repo to share links and ideas about this.

Greg Young's August 12-14 2013 Visit

Greg Young (of DDD, CQRS, CodeBetter, and SkillsMatter fame) will be coming to V1 in August for 3 days to work with the dev team on ramping up on these subjects.

I'm not aware of a specific, hard-set curriculum that Greg will be covering when he visits, but you can get a strong sense of what he normally covers from his recurring course outlines here:

Note: Event Store is a product Greg is developing, billed as

The open-source, functional database with Complex Event Processing in JavaScript.

Getting prepared for Greg's visit

Greg is most well-known for his articulation and elaboration of the Command and Query Responsibility Segregation pattern, a distributed systems design pattern that extends upon the Command Query Separation design pattern.

To make the most of Greg's visit, a bunch of us started gathering in HipChat in CQRSetc to figure out a plan for studying some of Greg and others' materials on CQRS, etc before he arrives.

It's a big subject, as evidenced by this diagram from the [CQRS Journey]((http://msdn.microsoft.com/en-us/library/jj554200.aspx) project:

CQRS Journey

Martin Fowler's summary definition of CQRS

As he often does, Martin Fowler provides a concise, approachable definition of CQRS:

CQRS stands for Command Query Responsibility Segregation. It's a pattern that I first heard described by Greg Young. At its heart is a simple notion that you can use a different model to update information than the model you use to read information. This simple notion leads to some profound consequences for the design of information systems.

The mainstream approach people use for interacting with an information system is to treat it as a CRUD datastore. By this I mean that we have mental model of some record structure where we can create new records, read records, update existing records, and delete records when we're done with them. In the simplest case, our interactions are all about storing and retrieving these records.

As our needs become more sophisticated we steadily move away from that model. We may want to look at the information in a different way to the record store, perhaps collapsing multiple records into one, or forming virtual records by combining information for different places. On the update side we may find validation rules that only allow certain combinations of data to be stored, or may even infer data to be stored that's different from that we provide.

Greg's diagrams

Greg uses these diagrams to depict the "typical CRUD view" on the left side with the CQRS view on the right side:

CQRS diagram

Study plan outline

Here's what we think, so far:

Individual Study

We figured we could read / watch the 3 links below individually:

Group Study

Extra resources

There are tons of great CQRS resources available. Rinat Abdullin done much to further CQRS, and collected tons of great summary info and detailed links here:

More of Greg's recorded free talks

Many of Greg talks are archived for free viewing at his SkillsMatter Profile

Code Examples

There are lots of samples on the web that have emerged.

  • Greg's Super Simple CQRS sample is a good intr to Event Sourcing
  • Microsoft's Patterns and Practices team underwent a long CQRS Journey, aided by more than 100 community collaborators.

Software

While it's by no means the only option in this namespace, Greg is working on Event Store.