Skip to main content

Sitecore - Module based approach

Okay so this is something I picked up from a recent developer group thingy and have been annoying my colleagues about this since then.
Instead of thinking Sitecore as one project (MVC) solution why not treat it like a module/deliverable based implementation.
I have created a sample solution which is here: https://bitbucket.org/ali_nahid/sckitchensync
 
The idea is pretty simple (Just like DDD pattern):
You get a rough idea of the entire implementation like what are the deliverable, functionalities etc etc and group them. Then just like the way you plan renderings on your page you plan bunch of different modules to implement in your solution.
In my case I divided my sitecore implementation into the following modules:
1.      The core:
This module contains the layouts and core renderings. In my case
1 standard layout that just defines the top level placeholders. Like header, footer, content etc.
And a “_MainContent” rendering that defines the other placeholders like bodycontent, bannerimage
And obviously the header, footer type of things that are going to be pretty much same throughout the entire site.
I’d give this task to “Gru” the evil genius.
2.      The Meta:
This module only handles the meta content (google meta, facebook meta, perhaps some GA code etc) of the site.
Let’s say “donny” the minion does it.
3.      The Navigation:
This module handles anything to do with site navigation like top navigation menu, breadcrumb, footer menu etc.
Let’s say “dave” the minion does it.
4.      The Imagery:
This module handles thing like “Banner”, Background, Carousel etc.
Let’s say “carl” the one eyed minion does it.
Each of these modules deal with their own set of sitecore renderings.
Interesting thing about this approach is these modules are MVC projects of its own. Sitecore is not restricting you from doing so. Who said only one MVC project for one sitecore website?
Ofcourse the "Domain POCOs" and "Service" and "Repository" layer concept exists as it is. And you can either separate them as per module or have them in their own projects is a personal preference.
 
Visualizing the above description:

instead of doing this:


We do this:


The few pros about this approach I could think of are:
1.      It can be very efficient in doing something like the following:
So you deliver a basic site with “Core, Navigation” module. Then you install/put “Imagery” Module. Then “The fancy” looking landing page module. And so on.  Each of these deliverable are independent to each other. So very less chance of breaking one while delivering the new feature because they’re all separate set of dlls.
 
2.     Easy to distribute work:
As per description each minion can take care of and be responsible for each module. This can come in handy to track progress.
3.      Once done maintaining becomes easier:
Because if something goes wrong or some changes required to make to the, for example Imagery module, you only look into “KitchenSync.Imagery.MVC” project as opposed to be bombarded by a massive MVC project.
4.      Creates a repository of re-usable components/modules. So there can be “Oakton sitecore repository” where you can search and download a module.
For example you need a navigation on your project download the navigation module from the repository.. you probably will need to made the tweak in the cshtml file to match the markup but the logic of how the navigation work remains the same. As a result you save yourself from creating bunch of sitecore renderings and classes.
5.      If gets follow through then this approach enforces a consistent culture of naming convention, field definition etc.
For example, on a page there’re often commonly 2 fields that exists. A summary and a description. Some calls it Short Description, Long Description and some calls it Summary and Description. Why not agree to one. They both mean the same.
6.      Testing is easier too. As you are testing one module at a time.
 
If you’re worried about how you launch it with IIS if there’re multiple MVC projects in the implementation, that’s not an issue either. So this is what I have done:
I have a typical sitecore installation which my IIS is pointing to and I am treating it as publish directory. My build settings puts the dlls to the publish directory /bin location so they become available to sitecore.
Then a simple powershell script copies the views to the publish directory’s Views accordingly. This script can be hooked to a VS post publish (I still don’t know how to do it)

So what you think? Worth it not Worth it? 

Comments

Popular posts from this blog

Managing devices using Edge Manager

Managing edge devices has been a complex process as traditional IT ops tools fall short in distributed, low-connectivity environment to manage huge quantity of devices.  Red Hat Edge Manager  (Open source project: FlightControl , GA'd by Red Hat on late Jan, 2026) solves these challenges by providing streamlined management of edge devices and applications through a declarative approach . Now, there's a fair bit to unpack here. But for simplicity this is how I am going to map those 3 things here: Management of edge devices: I am mapping this to LCM (including upgrade, patch etc) of the underlying OS (in this case RHEL OS of BootC flavor or at least UBI based RHEL ). Managing applications: Mapping this to deploying applications and LCM of the applications stack on the OS. Declarative approach: This one is super interesting. To me this is very K8s-yy but in the world of edge devices running linux (RHEL OS, as of today). And then this thing also has MCP : This is my next prob...

Hall of justice - Authorisation Greeting System

Ever since I watched the Young Justice EP-1 the security system of the Hall Of Justice and Mount Justice wow-ed me. After all it was built by Batman. You see similar AI driven voice guided system in pretty much in all sci-fi series these days. I always dreamed of having something similar of my own. Well, now I have it (sort of). Although we not quite in the flying cars era yet (disappointment) but IOT powered locks are somewhat normal these days. The adoption rate is great.  Some background: What is this Hall Of Justice Authorisation system? This is the security system that Batman built for Hall Of Justice. The movies haven't shown it yet but there're several scenes in the animated series and comic books. Basically, it is a AI powered voice guided intelligent security system that scans bio signatures (like retina, body dimensions, temperature, heart rate) through a scanning device and identifies which member of the justice league it is, logs entry then gr...

Story of a Java application in the cloud on Heroku

Starting with a monolith application is not really uncommon. But when the demand arises it is important to have a plan or path to go distributed either a Big Bang change or phased approach. I took the phased approach and the phases sort of happened naturally (without even knowing the right technical terms, BUT the concept and vision was clear). I will try to tell the story in this post. Although I will use "sample app" and the tutorials I prepared for this is a "sample app", I have faced the scenarios in real life few years ago and learned a thing or two. I am using Heroku for this "sample app" but this can also be implemented in AWS or Azure. I am sure there's always a better way of doing it, but this is how I have approached it.   Firstly, let's set some functional specification for our "sample app": The app will take request from the user (there's no restriction on how many users can request the app in a given second.) via browser....

CastleWindsor issue with MVC Area

I have been stuck with this issue and couldn't take it out of my head. Hence, ended up putting in some heavy hours solving it. But hopefully it is worth it. THE CONTEXT: I am implementing a MVC solution for an existing Sitecore 8.0 implementation which uses Castle Windsor for it's dependency resolver. Let's say a a tiny microsite. I had to implement a SPEAK app as per one of the requirements. Below are the 2 most important things behind why I ran into this issue in the first place: I needed to call a WebApi from my SPEAK app. 2. I decided to take MVC Area approach for my "tiny microsite" on a completely different sets of dlls For example the dlls for my "tiny microsite" are MyTinyApp.Web.dll, MyTinyApp.Business.dll whereas the main website's dlls are BigWebsite.Web.dll, BigWebsite.Business.dll etc.  WHY MVC AREA: The reason I took the MVC Area approach was to completely separate my "tiny microsite" so that I don't ...

Openshift-Powered Homelab | Why, What, How

I wanted to build a Homelab for some time but it was taking a backseat as I always had access to cloud environments (eg: cloud accounts, VMware DC etc) and the use cases I was focusing on didn't really warrant for one. But lately, some new developments and opportunities in the industry triggered the need to explore use cases in a bare-metal server environment, ultimately leading to the built of my own homelab, called MetalSNO. In this post, I will discuss some of my key reasons for building a homelab, the goals I set for it, and the process I followed to building one from scratch. I'll conclude with some reflections on whether it was truly worth it and what I plan to do with it going forward. Compelling reasons (The Why ) My uses cases for a homelab weren't about hosting plex server, home automation etc (I have them on Raspberry PIs for some years now). My Homelab is really about exploring technologies and concepts that are on par with industry trend. Below are some of the ...

Passwordless Auth to Azure Key Vault using External Secret and Workload Identity

I want to fetch my secrets from Azure KV and I don't want to use any password for it. Let's see how this can be implemented. This is yet another blog post (YABP) about ESO and Azure Workload Identity. Why Passwordless Auth: It is a common practice to use some sort of "master password" (spn clienid, clientsecret etc) to access Secret Vaults (in this case it is AZ KV) but that master password becomes a headache to manage (rotate, prevent leak etc). So, the passwordless auth to AKV is ideal.  Why ESO: This is discussed and addressed in the conclusion section. Workload Identity (Passwordless Auth): Lets make a backward start (just for a change). I will try to explain how the passwordless auth will work. This will make more sense when you will read through the detailed implementation section. Here's a sequence diagram to explain it: There's no magic here. This is a well documented process by microsoft  here . The below diagram (directly copied from the official doc...