Version 10 will be Ucommerce built on .NET 6. It is also a great time for spring cleaning, which means that as we move to new patterns, we also get to remove outdated, legacy things from the product.
I guess it is time to explain the title! 😁
We focused on three ideas for this first stretch of the development cycle: Infrastructure, Installation, and Independence. Migrate and update our foundations and the infrastructure, create a pleasant installation experience, and build Ucommerce as a standalone product for the first time ever to enable a wider array of decoupled and composable solutions. It sounds simple enough, but each comes with exciting challenges in reality.
Infrastructure means more than just migrating all infrastructure pieces of Ucommerce to .NET 6. No matter how well the foundation of the product shined over the years, we knew from the start that there was no better time to elevate and be more in line with modern, more familiar patterns.
Let’s take Castle Windsor, for example. Customization of the platform was powered by the XML configuration of every single component in the platform. This was an extremely powerful mechanism for extensibility, especially when coupled with the partial component extension and the flexibility of the pipeline framework. If we needed an extra step when saving stores, we could create the logic and instruct the framework to do it at the right time:
So we tell Ucommerce to insert our task as the last step in the “SaveProductCatalogGroup” pipeline. Not only that but this extension could then be packaged up as an App, an extension that then could be shared across multiple solutions.
Inversion of Control has come a long way and is now one of the core building blocks of modern .NET applications. We want to make sure that Ucommerce keeps its identity, but we won’t do it at the expense of compromising framework patterns.
So now the above can be done as follows:
A couple of things to note here: the registration is a single line of code, it no longer relies on error-prone string IDs, and the pipeline's name has changed. To this last point, we are updating most if not all of our pipelines and introducing a whole lot more of them so that extensions are easier and more convenient than ever before. Oh, and Product Catalog Groups are at long last called Stores!
There are several other significant changes to infrastructure, data access, session management, and more, but let us move on to the second “I”, Installation.
Ucommerce has historically been delivered in two package formats. For Umbraco, it was either a native Umbraco package or a NuGet package; for Sitefinity, it was only available via NuGet, and for Sitecore, only as a Sitecore .zip package.
Over the years, we saw more and more installations happening via NuGet due to the maintainability of packages and managing dependencies, especially avoiding version conflicts. We also need to admit that we had a challenge maintaining all of these packages and the difficulties of testing and enforcing compatibility. We decided that going forward, Ucommerce 10+ will be available only as a NuGet package.
Installation is not about the way we distribute Ucommerce. It is also how Ucommerce is set up. The primary objective was to ensure that we are aligned with how you would expect a .NET application to be set up and used. To make this as simple as possible, all you need to have Ucommerce running after installation is a couple of lines in your application start file.
This is also a sneak peek into how different parts of Ucommerce can be added to the application individually, which segues us into our third and final “I” independence!
This one is a little mischievous, as we see independence from two angles.
We want to allow and encourage the careful crafting of unique and personalized digital experiences because that is at the heart of e-commerce in a world where the competition for attention is fierce. This is what headless and composable solutions aim to achieve, alongside improving performance and the freedom of choice in the developer tooling.
We aim for Ucommerce to be installable, runnable, and scalable independently of the rest of your platform ecosystem for the first time. Using our expanding Headless APIs sets minimal to no boundaries as to how you imagine and bring the customer journey and experience to life.
Naturally, the integration between Ucommerce and other platforms (e.g., the CMS) will look quite different from today, but we’ll have more information on that later.
The other angle to independence is internally within Ucommerce. Traditionally Ucommerce was fairly well separated based on the different domains: Catalog structure, Transactions, Promotions, and so on. However, from a delivery standpoint, it has always been all or nothing.
You could ignore parts of the product and use a PIM or an OMS instead of the respective Ucommere apps, but when installing Ucommerce, you would always get the whole package. For the future, we are emphasizing better separating areas of responsibility. As a starting point, it is possible to install Ucommerce without bringing in the back office UIs for integration projects or servers that don’t need to run the user interfaces.
The long-term goal is to be able to install and use individual pieces of Ucommerce.
While all ideas above are nice, and hopefully, you agree they are, let’s talk about where we are now.
We have just finalized the first internal milestone that we set out to do. This means we have migrated all infrastructure pieces, have some of our UI apps fully functional, and have made several quality-of-life improvements to aspects of the platform such as data access, the pipeline framework, and much more.
In short, we have a substantial baseline that we can keep building upon. The next thing we will be focusing on is migrating all UI Apps to feature-parity, followed by tackling all available APIs, both Headless and In-Process.
And of course, we will keep you up-to-date as we have more exciting things to show!
If you have any questions or feedback regarding Ucommerce 10 or the product in general, our [email protected] is here.