Why Oslo Matters To Me

Oslo

I've been bloging some about my experience using and playing with different parts of the Oslo stack on projects and articles. I've gotten a couple of reactions as to why it matters.  I have covered some of it in my article series that focuses on DSLs and developers here:

But there is a bigger picture here that I want people to get their heads around: Models Matter.

As many of you know, I used to go by "The ADO Guy". When I started to look into Silverlight and Oslo, I didn't leave my ADO Guy at the door. I always tried to let people know that it was data (not necessarily databases) that inspired my love of development. Oslo is a natural extension of that.

"Why? Because Models Matter."

First, what is a model. A model (to me) is simply the description of shapes of data that represent real objects. You can call them domain objects if you like or business objects, but they are still just models of real world counterparts. We have had models in our code for years (or for me...decades), we just didn't try and name them that.

"If we know what a model is, how does that relate to Oslo?"

Oslo empowers models in our development. It allows us as developers to focus on building models that drive applications and platforms. So much of what we do as developers is try to deal with user input. We're collecting it, reporting against it, merging it, changing it, etc. But that's because we think of all data as end-user visible data.  In fact data and metadata is all data. Some is used to define and drive how an application behaves and some is the data that our applications are written to work with.

"How does Oslo empower models?"

Oslo is made up of three basic pieces:

"M"

"M" is a language (or languages) that allow you to describe data. This may be in the form of structure (MSchema), maybe in the form of instance data (MGraph) or maybe in the form of human language (MGrammar). These languages enable the creation and storage of data in a variety of forms (only one of which is database data). "M" is how we define our models (with MSchema and MGrammar).

Repository

The repository is a database(s) that allows for models to be stored. These models can be readily related to each other (which is why storing it in a Relational Database is important). The models in the repository represent metadata (as well as data).

Quadrant

In many ways this last piece of the Oslo stack is the one that pulls the whole notion of Oslo together. Unfortunately its also the one that hasn't been much available to play with (the PDC preview didn't allow you to view your own types so it doesn't count). Quadrant is a viewer of models in your system (meaning the Repository). Quadrant is an editor that is primarily used to change system parameters, not necessarily end-user data (though you could see that it might be used in some scenarios for just that). Quadrant allows you to define your own visualizers/editor for data that is in the Repository. This does imply that enterprises that embrace Oslo may decided to use Quadrant to handle their IT roles instead of writing a number of tools and dashboards that fill the same need. The expectation (though this is based on what I've seen publically) is that writing visualizers or editors should be much easier than writing a number of standalone apps or a web dashboard.

Putting It Together

The Oslo stack is made to work together (though you can get a lot of benefit using part of the stack). So in a usual case, lets assume that we use "M" to build a set of rules that define a business need: salesman commission calculation. Then we store those rules in the Repository. Also in the Repository are models that you are already familiar with, the .NET Framework types. So in the Repository are types like a System.ServiceModel.OperationContract. We might define a new contract in the Repository that includes our rules and tie it to a new endpoint that exposes that contract to retrieve our rules.  This doesn't mean that we'll always use Repository-based WCF Services, but it provides a mechanism to make our applications completely driven by models. To change these related elements in the Repository, you may edit those models in the Repository.  Change the model, the system changes. Its a live connection between the two. And our rules that were defined with "M", now living in the Repository, could have an editor/visualizer in Quadrant to allow the Sales Manager change the rules about commissions as (s)he changes it or even makes one-off deals with certain sales people. (Which, if you haven't had to code a commission calculatork, you haven't lived.)

By modeling your application from top to bottom, you can create systems or applications that can evolve without necessarily having to do a full-cycle build everything, test everything, deploy everything. It approaches the concepts of modularization is a huge way. It allows us to think about and test our systems is an extremely loosely coupled way.

Oslo is a high-risk, high-reward gamble for Microsoft (and me). If Oslo succeeds, it will fundamentally change the way we think about building systems. We can be intentional about our designs and know that systems change. We will cease 'encoding' intent into code, but allow models to contain today's 'intent' and let it mature like the rest of the system. This isn't about making programming easier, its about making systems more flexible.

What should you be doing about Oslo? Watch it mature. Download the SDK and play with the bits. Build a simple DSL and understand why that's important. When Quadrant ships, start thinking about how you can leverage it. We're at the point where you probably don't need to build systems with Oslo, but if you want to be ready when Oslo is, keep your eyes open and read the progress.

What do you think?

Comments:

Gravatar

For me what brings a technology to life is great examples of its use that I can relate to rather than abstract terms that mean little to me like WS-*, OLE as examples of stuff that never really grabbed me by the balls so to speak. .NET on the other hand did....so the jury is out on OSLO!

Regards
Lee

Gravatar

Lee,

The jury is still out with Oslo. Once we have concrete examples (once Quadrant is released) I think it will be clearer.

Gravatar

Oslo is a great idea! When it gets into main streaming development, we programmers of the world will be able to create more robust and valid systems based on the business requirements.

Gravatar

Thanks, just one more question on this...

Isn't Entity Framework the tool that is for creating models (from an ADO.NET perspective) ?

And aren't POCO objects for creating domain models ?

Gravatar

Steve,

EF is to create access to data models (and you'll be interested in knowing that EF will be adopting Oslo with their MEntities instead of EDMX).

The DDD folks like to create POCO objects to push down the models to the DB, this is another approach (MDD - Model Driven Development).

Gravatar

we like to create POCO objects to push down the models to the DB?

umm.. I think you like completely missed the whole point of MDD and DDD in general.

Gravatar

Greg,

Remember that not all your data is domain models. It could be models of running components of a system (like the web services, or MSMQ instances of a system).

Gravatar

Greg,

Also, Oslo isn't trying to speak to the DDD (or in your case DDDD), that's a different philosophy. The MDD folks are not POCO purists, they define models that they use tooling to build up system components. DDD and MDD are *very* different.

Gravatar

we like to create POCO objects to push down the models to the DB?

umm.. I think you like completely missed the whole point of MDD and DDD in general.

Gravatar

Umm DDD is a kind of MDD (or we use MDE). Perhaps a link will help? http://en.wikipedia.org/wiki/Model-driven_engineering

MDA is a specific set of rules by the OMG around MDE. Both DDD and MDA are MDE (or forms of MDD). The difference between DDD and MDA is in how we choose to represent the model, in DDD we believe that it is best expressed in code as the domain model. MDA people believe it is best expressed in a platform agnostic description which is then converted to a platform specific (PIM/PSM) (I know I am not doing justice to this process).

Again ... DDD and MDA are both forms of MDD or can be considered MDE.



My specific comment was holding issue with your comment that we use pocos to "save data to the database". We use POCOs to model the behaviors of a system in an object oriented model ... there is not even a need for a database.


Gravatar

Greg,

I think you're splitting hairs. So as you say, "MDA people believe it is best expressed in a platform agnostic description which is then converted to a platform specific (PIM/PSM)" and that is what Oslo is trying to accomplish. I readily admit that they are not yet 100%, but I know that Doug Purdy especially is trying to find some cohesion there.

I didn't mean to assume you mean that POCO was *just* for DB (or that it had to be in a DB), but in fairness, most POCO models are stored in the DB. If you are doing DDD, Oslo may not help you. But I still think is a viable platform to watch, more because it may help a lot of people grok and build MDA systems. Its not to push DDD to MDA, but to help people building ad-hoc systems make sense of their dynamic-ness (not really a word).

Like most times we discuss this stuff, you and I get caught up in the nomenclature but I think we mostly agree.

Gravatar

Oslo will matter if (a) they can show a productivity benefit to developers sooner rather than later and/or (b) it can provide a mechanism/store/substrate to bring things together that are currently all over the place, i.e. a unification abstraction.

Oslo has a shot at being a 'blue collar' dev-centric MDA approach, in a similar approach to how VB introduced dry smalltalk like concepts of event-driven programming/visual models with practical benefits.

In a similar way to OLE(!), what it needs are the *run-times* to come out of Microsoft early, as the 'consumer' story for (a) and (b) above are a tough sell without them. Microsoft's biggest Oslo target to win over first is Microsoft; and when those bits are revealed more then things will be clearer.

Gravatar

First, Oslo is more evolutionary than revolutionary. Oslo is taking modeling paradigm, practices, technologies and products that are scattered all over the planet and placing that under one umbrella. There will be innovation. And, Oslo will fill in some gaps of existing areas. And, an innovation ecosystem like never before will rise up. :-)

The Oslo PR is largely missing references to technologies doing similar things. This is one reason many in the Microsoft ecosystem have a 'mental blue screen' with it. The CTP is missing the generator half to the picture as well as real-world examples. For now, you have to build your own by hooking into the CTP code.

A practical starting point: Microsoft Patterns & Practices. If it's general-purpose framework, it's a great starting point to DSL it. The idea is to *spec* the application, then *parse* the application, which is then manifested as data to pre-built framework configurations, template generators, code generators/emitters, and more.

Then, there are *functional* DSLs, e.g. storyboarding, requirements and use cases. c.f. Cucumber for a storyboard example (it's the generator that makes it a test or functional tool). As for functional DSLs, I don't know of any *automated* products. As JP Tolvanen put it, most shops do not reveal their DSL strategies for competitive advantages. :-) (Actually, most shops don't do automated methodology and being agile is not automated). So, a shameless plug of a functional DSL example, UCD (Use Case DSL): http://bengillis.wordpress.com/2009/04/18/a-variety-of-dsls-in-real-world-examples/

The cat's out of the bag anyway. And, Microsoft deserves credit for this. It will raise the bar on value-added innovation and that's a good thing. No more "mowing the yard with a pair of scissors".

Gravatar

I think you are damn RIGHT Shawn!
I am closely watching it and I would like to see the BIG CHANGE!


 



 
Save Cancel