In my last post What Does It Mean to Be Universal, I talked about Microsoft’s new Universal Application Platform (name may be changing to Universal Windows Platform), coming in Windows 10. This new application platform allows you to build one application and run it on different platforms. In that post I told you how Microsoft was doing that. In this post I want to look at an example of what a single app running everywhere, might look like.
Let’s say you were building an application for manufacturing company. They want to deploy IoT sensors running Windows 10. These sensors would gather telemetry data from the machines on the factory floor. This data would be transmitted to the cloud where it would be analyzed and reported through machine learning (out of scope for this post). The data then can be accessed on Windows PC, Tablets and Phones. They also want to take advantage of augmented reality technology to give their plant manager real time access to the data while they are walking around the plant.
In the past you would probably create a project that looks something like this. You would have multiple projects for each head you want to support. Plus you would have some libraries for code that you want to share across each of the heads. After compiling, you end up with an application for each head. Although not too complex, there is the potential for major code duplication. This is especially true when it comes to the interface and platform specific code (where API differ). There was less of an opportunity for reuse.
Under the system you can create one project, compile into one application, and have it run on all the devices. The APIs are pretty much the same. When they do differ for a device, Microsoft has a way for that code to still live in the same project (see my last post for a sample). There may be times when you want to separate out code. For instance code that can be reused in projects that are not part of the new platform, server code comes to mind. That should still be possible. I say should because we don’t know for sure. We will have to see what comes out at Build next week. Hopefully we will have more clarity on this.
So one project or many projects? This universal platform is going to make us rethink how we architect our solutions going forward. Does it make sense to have everything in one project or do you want to keep things separated? I can definitely see creating utility projects that get reused between different solutions but does it make sense to have a .dll for Services or Models? You used to be able to replace those components just by swapping out dll’s but now everything gets wrapped up into an apex package that is signed. Swapping out dll’s would invalidate the package so a new build is needed. I am interested in hearing what people have to say about the new universal platform.