There’s a valid question to be asked around the technology platform and direction for a rebuild of the eCommerce platform. Historically, we’ve been a Microsoft Asp.Net based shop; outside the team there’s something of a perception that we’re tied to Microsoft as a development and deployment platform.
Some of that perception stems from the fact that as a historically small team, it didn’t seem to make a lot of sense to try and maintain multiple disparate platforms. In the era when the team was divided between VB and C++ programmers, we often ran into a situation where developers from the VB side of the world were free, but C++ code needed a change, or vice versa, so when we could converge the team on C# and eliminate those pockets, it made resource management simpler and more effective; recognizing that has made me somewhat more reluctant to partition the team.
The classic ASP.Net Web form styled development we’d done in the past is clearly not the direction in which Microsoft is investing in the future. Their focus is clearly on MVC and Razor for web development, and in general, they are pivoting (in a more ponderous way than may have been good for them) to a development model that’s more similar to the way other web scale platforms address things. Dino Esposito’s book says “You still have a mature and reliable platform that will be maintained for a few more years and supported for the foreseeable future.” If we’re doing large scale reworking of the site – it doesn’t seem wise to invest in the platform that’s moving into maintenance mode.
So – if we’re moving away from the classic ADO.Net/Asp.Net Web form development work, where does one go?
In the Microsoft dev tools space, the work their doing around MVC for new development is clearly directionally interesting, particularly when coupled with the OWIN platform work that seems to position them to let you run the stack on top of things other than IIS. This would seem to be a part of the infrastructure work that will let them run MVC web sites via Docker on Linux hosts. The Enterprise Application Architecture for .Net 2nd Edition book does a good job of showing how you can use MVC in a way that’s compatible with a Domain Driven Design approach, with reasonable separation between the environmental/infrastructure world and the underlying domain logic, and it’s fairly clear that there are ways to bring Microservices into that umbrella.
The counter argument to this is that the momentum in for web / cloud scale sites is pretty clearly on the side of Java at the moment.
- Docker and it’s container kin have emerged from that space, as have large numbers of deployment and configuration management tools – and while the MS community is begining to grow similar capabilities in some places – they are playing catchup.
- There are certainly opportunities to bring in potentially valuable assets from the open source community, particularly some of the things coming from NetFlix OSS, they don’t have analogs in the Microsoft world.
My thinking at the moment is to continue to use the Microsoft ecosystem, but in a way where we minimize the exposure of “Microsoftisms” as much as possible.
- Domain Driven Design approach, with a CQRS approach to modelling the application layer interface.
- Micro-services
- deployed as restful HTTP services.
- No Datasets or other MS infrastructure components in any exposed service interfaces. Services return JSON or other XML based data collections. This should let us consume those services from other technologies, and use other technologies to build replacements where we see fit in the future.
- Polyglot view of persistence.
- The right Datastore for each module/micro-service.
- If it’s our legacy SQL server platform, great. Aggressive use of Hekaton and similar things could yield some advantages.
- Open to things like Cassandra, Dynamo-db , Aurora.
- Agnostic as to the underlying web server platform
- IIS is an option, but so is MVC in Docker containers under Windows Server w/ Docker support, or other platforms.
- MVC for the user interface, coupled to a well organized domain and application services model that separates the core business logic and processes from the presentation layer to allow us to make a change there later if needed without throwing out too much of the application.
My thinking is heavily influenced by:
- The availability of a solid, gelled team of developers with experience with the Microsoft tooling and development environment.
- If I’m going to take them through an architectural generation change, there’s something to be said for not forcing a language change on them as well.
- They are generally productive in that environment today.
- That development team has significant domain knowledge and expertise that we need to use.
- There exists a body of code in place that offers opportunities to help us move this process along expeditiously with some refactoring, and generous use of adapters and anticorruption layers between systems.