I'm on Version 11 of OutSystems and am a newbie.  I've been through much of the online training with regard to architecture and how to identify the different modules of your application across the 4 different layers.  What I'm not clear about is how to decide what applications those modules should go in.  I don't think all of the modules across all 4 layers should go in one application, so how do you decide the number of applications?  Is it one per layer?  Or is there some other way to determine this?  

Thanks for any information you can provide!

Hi Sylvia,

Applications are a way to group your modules in a business sense - most of the time they will contain modules that belong to different layers.

If you have an application that serves a specific purpose, you'd keep everything in it that is directly related to that purpose. Let's say you have a Master Data app whose sole purpose is to store clients. You could have an Application named Clients, and in it you'd have your:

 - Clients module as a frontend;

 - Clients_CS module as your core;

 - Clients_IS as your integration services;

This makes it both easy to identify everything related to a business concept (everything that I need to know about clients exists in the Clients Application) and it also simplifies the deployment procedure, as LifeTime will deploy Applications as its smallest selectable subset in a deployment (not modules).


Afonso Carvalho wrote:

Hi Sylvia,

Applications are a way to group your modules in a business sense - most of the time they will contain modules that belong to different layers.

If you have an application that serves a specific purpose, you'd keep everything in it that is directly related to that purpose. Let's say you have a Master Data app whose sole purpose is to store clients. You could have an Application named Clients, and in it you'd have your:

 - Clients module as a frontend;

 - Clients_CS module as your core;

 - Clients_IS as your integration services;

This makes it both easy to identify everything related to a business concept (everything that I need to know about clients exists in the Clients Application) and it also simplifies the deployment procedure, as LifeTime will deploy Applications as its smallest selectable subset in a deployment (not modules).


Thanks for the quick response, Afonso.  I guess I had assumed that at least the library/integration layer would go in a separate application because these are things that you want to share with other applications.  Do you agree?  Or am I not thinking about this correctly?

Also, if we want to deploy in containers, does this affect the division as well?  Can you deploy multiple applications in a container?



It depends: let's say you have a module with actions or components that will be consumed by most of the other applications in your factory, something like custom authentication. It would make sense to isolate it in an Application because it won't "belong" to any of your business concepts - it's something that would be used by everything. Separating by layer means most factories would end up having four monolith applications, which would make managing and deploying them very complicated.

I'm not too certain about containers since I've never encountered anyone that used them. Looking at the documentation it seems that the minimal deployment unit is still per application, so it would follow the same logic as LifeTime, but hopefully someone can chip in with more detail!

Solution

Afonso Carvalho wrote:

It depends: let's say you have a module with actions or components that will be consumed by most of the other applications in your factory, something like custom authentication. It would make sense to isolate it in an Application because it won't "belong" to any of your business concepts - it's something that would be used by everything. Separating by layer means most factories would end up having four monolith applications, which would make managing and deploying them very complicated.

I'm not too certain about containers since I've never encountered anyone that used them. Looking at the documentation it seems that the minimal deployment unit is still per application, so it would follow the same logic as LifeTime, but hopefully someone can chip in with more detail!

Thanks, Afonso.  Sounds like I need to stick to one application.  :)


Solution