As I continue my journey with Outsystems  (and web development in general) I am often left wondering if I'm doing things the proper way.   I have reviewed documentation on the 4 layer canvas.  I think I understand the general concepts, but I'm wondering what the if there is a best way to execute it?   The library and core modules are the most logical to me, but when I get to end user and orchestration it becomes more fuzzy.

If I have an application with 10 screens do I make each screen its own module/web block?   Then in the orchestration module do I pull in all of those web blocks to form the final product the end user experiences?   Does anyone have an example project that they can share that shows how this all really comes together as a functional page?   

I need to avoid circular references so my pages shouldn't "know" about  each other and I know I can use the getEntryURL function to handle all of the links as external URL but I doubt that this is the best way forward.   

Thanks in advance for any guidance provided.

Hi Josh!

The Outsystems documentation give us the general guidelines, and I think that in practice, each one should take some reflections about our needs and apply what works better for the case. I'll try to answer yours questions telling  you what we are doing here, but as I said it's not a general rule.


In 4 layer canvas end user layer we put all modules that contains screens for an application, like CRUD screens or a screen that execute some action in the application; each module group screens for a specific domain. For example,  for an application that have final users (like costumers) and admin users, you could have two end user modules, grouping screens that belongs to each module. In orchestration layer you could have modules with screens that contains dashboards or information like a portal linking to end user modules screens.


Talking about circular dependencies, I think that the use of getEntryURL it's not a issue to worry about, because it belongs to system module; circular dependencies is about references between modules.


Use use these components to help:

Eletronic Canvas: During design time we use this component to define application architecture, and all modules.

Discovery:To monitor environment's evolution and care about circular dependencies.


Help this helps someway.


Regards,


Tiago

Okay i think I’m following along.   One end user module with all screens for each user group...but if you go that route how do you handle multiple developers working together?   I assumed each screen would be its own module so you don’t have multiple people working on screens within the same module at one time.

Multiple people working on the same modules (different screens) is not an issue; the platform makes a merge and it works properly. Many developers working on the same screen came more complex though; although platform act at the same as before (making a merge), in this case the automatic merge can't decide about many modifications, and this cause a extra job to mark which one should be deployed (conflicts in the merge).


Regards,


Tiago

Thanks again, I think our team wants to modularize more than just a single end user module containing all of the screens.   So now I'm thinking about splitting screens into different modules and then developing each screen as web blocks.   Then create a view module which pulls all of web blocks in, I just worry that we are going to run into issues down the road if we go this route.

Hi Josh,

I think that there is no silver bullet and you would try it and change what not works properly. I'm afraid only about the approach to make all screens using web blocks. I think that you should select what can be reusable and make it as web blocks and build others as simple screens. Web blocks are more complex to develop, maintain and debug, so, if it will not be reusable, I don't see benefits on it.


Regards,


Tiago

Hi Josh,

Sorry for going back a bit here, but what documentation did you review to learn about the 4 Layer Canvas?  Was it docs or was it the Architecture Guided path in the Training area?

The Designing an Architecture course (in the Guided Path) walks through an example scenario that shows various architecture decisions being made using the canvas.  The Style Guide Architecture course may also be helpful in determining how to split up some of the Front-End elements into modules.

You seem to be concerned about having more than one developer working in the same module at once.  This isn't really a problem if they aren't working on the same elements.  If each developer is working on a different screen then they shouldn't encounter collisions much and can do simple merges when they publish.

Regards,

Scott

I was looking at this information, and it is useful but I was hoping there would be an example project that could be downloaded and reviewed to see an example of concept to reality.

https://success.outsystems.com/Support/Enterprise_Customers/Maintenance_and_Operations/Designing_the_architecture_of_your_OutSystems_applications/01_The_4_Layer_Canvas


I think my biggest struggle with multiple developers working together stems from the fact that previously I have been the only developer on my application, so the thought  of having many people collaborating worries me.   It's just something I'll have to work through.    

I do wish Outsystems integrated with Bitbucket though so we could easily see who changed what and when.   I know there are versions saved on the server, but in a given day each person might publish 100 times as they tweak things and I would love it if there was some way that the work could exist in their own private version and when finished and polished could be committed to the development branch.

I came here with the same questions. As my company starts to build its competency, we are working on a simple proof-of-concept shopping app being developed by five people. We quickly learned that multiple developers per module creates chaos. We are now operating on a model of one developer per module.

One developer is working on a module with a set of screens that browses products and puts them into a cart. I am working on a module with a set of screens for managing the shopping cart and making a purchase. Another developer is working on the data module. Another developer is working on a module with a set of screens for managing the product inventory. Another developer is working on a user management module with a set of screens.

At some point, we will want to lash at least the product browse and shopping cart module into a single customer portal with a shopping cart icon in the upper right. This portal will have a navigation menu and pull in the end-user modules somehow. We are a little perplexed on how to do that gracefully. Web blocks?

great tips we had the same doubts.

Hi,

I am able to create Core and Library layers for my project but when I am creating 2-3 end-user layer modules then it automatically falls into the core layer. I tried more than 4-5 times. In the attached screenshot Provider and Dashboard is my End-user layer, but when I published the both automatically fall in the Core Service layer. It's notifying the reference of Template. Please suggest how I can create my End-user layers so that it can directly fall into the end-user layer after publishing. 

I didn't manage any reference yet. I am trying to view it on Discovery without any reference.

Please find the attachment for the same, for both Provider and Dashboard module the same popup is appearing.


All modules are blank, I created just for architecture validation for Reactive Web Application.


Regards,
Amit

Hi Amit,

Discovery tool require us to assign proper layer for our module if they are not assigned correct one automatically. Discovery can only assign layer initially but it may not be correct. 

So either you can assign layer to your module from Modules -> Assign Layer menu or as soon as you add references to yor core modules, create screens and other items in your end user module then discovery may automatically move your module to end user.

I would suggest not to depend on discovery for module layer assignment, assign layers yourself and then validate your 4LC.

Nikhil Gaur wrote:

Hi Amit,

Discovery tool require us to assign proper layer for our module if they are not assigned correct one automatically. Discovery can only assign layer initially but it may not be correct. 

So either you can assign layer to your module from Modules -> Assign Layer menu or as soon as you add references to yor core modules, create screens and other items in your end user module then discovery may automatically move your module to end user.

I would suggest not to depend on discovery for module layer assignment, assign layers yourself and then validate your 4LC.


Thanks, for your reply Nikhil. The option you are telling I know, but I would like to know why the same architecture is correct by default for Traditional Web and the same architecture by default not correct for React Web Application that's I mentioned my point is releted to React Web architecture. I tried the same for Traditional web and be default it was correct but not correct layered for React. I got the answer, in the Reac Web application - When a new module is created then it'll reference to the first created module ( common we blocks) so it is a type of side by side reference here but when we'll create module in Traditional web then it'll create independent module without any reference of first module by default. This is the main reason why the same architecture is perfect for traditional web and it's not correct for react web app, you can check it. I agree with you we can rearrange our modules as per requirement by using discovery.


Thanks,

Amit



Hello Amit & Nikhil, 

This is an old topic that you'll are responding to. Please create a new topic. I am closing this one. 


Regards

Amal