Wednesday, February 18, 2015

Pluralsight - Building End-to-End Multi-Client Service Oriented Applications

It took me a long time to decide to watch Pluralsight's Building End-to-End Multi-Client Service Oriented Applications course by Miguel Castro. At 11 hours and 43 minutes in length, it was going to be no meager undertaking and compared to all the other courses I had taken from the Pluralsight library, this one was going to be by far the longest. Once I start something, it's very important to me to finish it so I wanted to be sure that this was not going to end up being a struggle just to reach the finish line. I had watched a couple of sessions that Miguel had given at various conferences and found the content to be both well thought out and well presented. I assumed that this would be the case for this course, which aided my decision. I was also looking for a way to further develop my understanding of SOA and given the depth of this course, it certainly looked like it would be able to help me achieve that.

The course starts with a demonstration of the application you will be creating, followed by an introduction to SOA and then an explanation of the application's architecture. I like how Miguel did not waste any time here and with less than an hour on the clock, he was diving into writing code. He starts with defining the entities (both for the client and server sides of the wire) and then moves on to using Entity Framework to craft the data access layer. Following this he tackles the business layer, where you learn about how he creates services and "business engines". The next two modules are focused on service hosting and client access, with the final part of the course spent creating both an ASP.NET MVC website and a WPF desktop application. I did not watch the modules on developing the WPF application as my primary focus for this course was related to web application development.

The exercise files were a highlight of the course and it is clear that a lot of time was spent on them. I really like how Miguel has created a "starter" and "complete" version for each of the modules. I would start with the starter version and code along with the course, only using the complete version as a reference. The most useful part for me was that once a module was complete, I could begin the next one with the next starter version. By using a "clean slate" that is in perfect condition at the start of each module, I didn't encounter any "what went wrong?" moments that you normally experience when you are using your own copy throughout a course. Another benefit of this was that it allowed Miguel to cram even more value into the course by only having to teach the pattern and not having to implement it over and over. Once he had demonstrated it, I had the opportunity to either complete the implementation with the starter version, refer to the complete version to check my understanding, or move onto the next module and use that module's starter version. The ability to be able to choose what and how much I wanted to code was really beneficial in helping me stay committed to the course.

Many important concepts are introduced throughout the course, but the one that resonated the most with me was how a well-designed application can re-use the same pattern in multiple places. Miguel’s example of this was his use of abstract factories serve to the data repositories in the data layer and the business engines in the business layer. Using the same pattern increases readability by adding a common structure to the application that anyone maintaining the code base can rely on. Once the pattern is understood, you will now have an understanding of what is happening wherever the pattern is used. This is one of the major benefits of using patterns.

Another highlight for me was the MVVM pattern with Knockout.js. Having already used Angular.js for multiple applications, I was familiar with the SPA concept, however, I had very little experience with the MVVM pattern and Knockout.js. By the end of the website modules, I was able to go back to a feature that had been written using only jQuery and re-write it to use Knockout.js with a completely segregated view model, view and model. It was very rewarding to see an immediate return from watching this course.

In total, I probably spent somewhere in the region of 25 hours watching and coding along with this course. I am already planning to watch the course again where I aim to build a bare bones version which I can use as a starter template for future applications. If you are looking to learn about how to build real world applications from the ground up using Service Oriented Architecture, then this Pluralsight course is a must watch and will be more than worth the investment of your time!

Oh and I’m looking forward to part two of this course! Although, I did notice that any mention of this has been removed in the Angular edition, unfortunately.