With 10 streams on, there has been a lot to choose from at NDC in Oslo. But as day one ends, I've now voted with my feet. And since I can't be in two places at once (though the overflow does technically make this possible) these are the decisions I made, and a few takeaways from each.
I was pretty much jumping from one session to the next today but had a little time to walk the stalls first. A quick chat with the Guys from Microsoft, Octopus Deploy and a few stickers from some other stalls such as Twilio and JetBrains.
Jon Skeet joined Mads Torgersen on stage to run through some beta builds of Visual Studio to demonstrate the coming soon features of C# in version 8. Honourable mentions I am looking forward to are the new switch pattern matching, Nullable Reference Type (
string?), and the new "Dammit!" operator.
I managed to find myself sitting next to Jon at a talk later in the day, and am very happy to have had a quick chat and got a Selfie with him.
Implementing a Clean Architecture in .Net Core
Ian Cooper from Huddle walking us through Ports and Adapters in an evolutionary step by step way, evolving through an application while also going through the history of the architecture from Entity-Control-Boundary back to Hexagonal and Ports and Adapters.
I must check out his library Brighter for its CQRS Command Dispatcher support.
The power of Roslyn
After lunch, I was able to find out more about (and how easy it is) to make Roslyn inspecters and refactors from Kasey Uhlenhuth. Another must try to add to the list.
Give it a REST
I met Liam Westley the night before and his elevator pitch and some conversion over beer lead me to make this a must-see. Also from Huddle and works with Ian Cooper, the full title "Give it a REST - Tips for designing and consuming public APIs" was a nice mix of tips and tricks for building, consuming, and maintaining REST APIs in a real, pragmatic way. Full of example horror stories from in and around his own company, it was full of valuable points to take away and start using.
One point of note, was using a nested PUT on a resource to do patch actions in a lightweight way (such that a record status update would be a PUT to "record/123/status"). Pragmatic. Also, asynchronous requests using
202 Accepted, using
429 TooManyRequests for throttling, and using cache-related headers.
(Apologies to Peter Hilton for missing yours that was at the same time, it is going to be a must see when I get access to the recordings. Beautiful code: typography and visual programming. - see twitter)
Reinventing MVC pattern for web programming with F#
For a bit of a change, while still following the AspNetCore theme, I went and watched Krzysztof Cieślak (Chris), dubbed OSS Troublemaker. He talked about his Open Source project Saturn which is built on top of Giraffe which in turn is built as an F# Library on top of AspNetCore. Saturn is an "MVC" library in F#, written to give you the power and performance leveraged from AspNetCore, but trying to keep in mind the concept of the Pit of Success, to make it easy to use, and easy to get starting as a new developer, while benefiting from the principles of MVC, and the power and productivity of F#.
So many new tools to explore, and we are only one day in!
An Opinionated Approach to ASP.NET Core
K. Scott Allen gave us some opinions. I couldn't find anything too much to argue with, which probably means I should have gone to a different talk instead. However, his points were interesting to hear from someone else, nonetheless.
Use "Features" folders to structure areas of your application functionality (keep Use-Case centric code together essentially); Async suffix has served its purpose, and is no longer really that relevant (we can stop mandating it); There is a button in Visual Studio to toggle the Solution Explorer between classic view, and filesystem view; put your build and helper scripts in your repository; have samples in your repository; put your solution at the top level of your repo. As I say, lots of stuff that I would probably advocate as well if you asked me.
The one throw-away comment that stuck with me was actually "I wish there was a way to put my tests in here too" in relation to being beside the code in the Feature beside the feature's code. This is something I have to go away and see if it can be done with a little MSBuild magic, and maybe even extracted to a target file in a NuGet package, perhaps.
Tomorrow is day 2, and there will another ~70 talks to get down to 7 which I should be able to give another debrief on as well. It may take up until tomorrow to make that decision, though.