When doing Continuous Integration and Continuous Deployment, sometimes its great to get your code into production but hidden from any end user actions. In this post I will outline what I have been using with great success on my SaaS application ObsPlanner. There are however loads of libraries and other tools that will do the same thing, but I opted for the more simple, home grown approach.
My application is an MVC application that uses Angular JS in the views to give a better end user experience by acting as a mini SPA, so C#, Razor and Angular need to know about what features are available and what is not.
The database structure is simple, a table with one column for the toggle name and another for if it is enabled like this:-
I am using Entity Framework for all my database work, so I have a FeatureToggleRepository that retrieves the data like this:-
Each of my MVC controllers inherit from a BaseController which has methods used throughout the site including the getting of toggles:-
Now each of my controllers can easily get the toggle list:-
Where the toggle list is added to a view model, in this case it includes the logged in user details as well as the toggles. So in the view I can use Razor to run a conditional against it like this:-
The setup for this site is a development, staging and live server all with their own copies of the database. So this method allows me to push code through the whole life cycle and simply switch on the feature on the live server when I am happy with it.