If you missed it, "Jasper" is the working codename for complete reboot of FubuMVC on the new ASP.Net vNext runtime. I haven't done much yet, but I started a new GitHub project at JasperDotNet/jasper. All I'm doing right now is fleshing out the README with high level plans.
I was in Salt Lake City last week and had quite a few conversations with Corey about the possible directions we could take, with the official goal being a pathway to moving our newest, fasted moving big project to the new ASP.Net vNext runtime next year. Roughly speaking, we have two possibilities:
1. Port FubuMVC to the new runtime and call it 3.0. Try to change as few API's as possible. I'd probably try to collapse Bottles back into FubuMVC.Core if I do this. Not sure if I'd bother with FubuCore.
2. Get a move on and build the core elements of Jasper fast
I would very, very strongly prefer to do #2, but pragmatism and prudence suggest that #1 is what we should do (at least at first).
That being said, here's the latest thinking on Jasper:
- Go ahead and take a dependency on MVC 6. Use the pieces of it that are usable. Try to be a value added, modular replacement for things Jasper would do better than MVC rather than a complete replacement. This is a very different angle than I was taking a couple months ago, but Corey made a good case for doing this. I think we'd be smart to stay closer to the mainstream this time. I think we could at least allow you to use MVC6 actions and IActionResult kinda things within Jasper chains to make adopting and transitioning to Jasper much easier than it was going from ASP.Net MVC to FubuMVC.
- The core things that Jasper should provide right away are a better routing module (MVC's is very inefficient for the way we used it in fubumvc), a close analogue to FubuMVC's BehaviorGraph model so you can use policies and conventions to assemble middleware per route, and a way to alternatively use FubuMVC style "Endpoint" methods without the silly IActionResult stuff.
- Corey & I don't entirely agree with this, but my thought is to use a content negotiation model very close to what FubuMVC 2 has. We can *delegate* to pieces of MVC6 codes within our conneg infrastructure however.
One of the things Corey suggested was to try to use MVC6's implementation wherever that's not disadvantageous. I somewhat amended that to saying we could use pieces of MVC6 like the "IBuilder" interface upfront to get going faster, but replace that later with a different "composer" module based on Roslyn metaprogramming.
Roughly speaking, if I am able to start working on Jasper next month, my plan of attack is:
- Seed the code, get comfortable with the new runtime, try to get an auto test setup going w/ Fixie
- Build the new routing module based on the Trie runtime
- Adapt the existing FubuMVC BehaviorGraph/BehaviorChain model to assembly nested OWIN handlers. Maybe delegate to MVC6's IBuilder in the first iteration
- Adapt the FubuMVC 2 conneg model
- Rebuild the default conventions from FubuMVC2 into the new bootstrapping, but use Roslyn metadata instead of type scanning (maybe)
I'm still not sure that anything real will happen, but I still wanted to push this out this week to see what y'all think.