Can we have side references in Core and Library layers
Application Type
Traditional Web, Mobile, Reactive

Hi,

I have better understanding  about designing application architecture.  There are mainly three rules defined.

  1. No upwards references
  2. No Side references among Orchestrations and End- User.
  3. No Cyclic references among Core and library layers.

But I just want to get idea, can we have side references among Core and Library layers.?


Dileep



Hi @Dileep Verma,

Yes, you can have side references among core and library layers. The key therefore is to avoid 'cycles' between them.

Rule #3 will be of interest to you in this article.

Regards,

AJ

Hi Dileep,

Like AJ stated, it is completely fine to have side references among modules in the Core and Foundation layers, respectively. This makes a lot of sense in terms of allowing proper code modularity and composition for a robust architecture, not to mention that you can conceptualize several sub-layers inside the Core/Foundation layers so that these 'side references' can be understood as downward references (image taken from this article).

You might have found, for example, that Discovery finds side references by default between modules and applications. However, these generally don't correspond to Architecture violations, but rather as a heads-up/prompt for you to consider layering your modules with a more granular approach according to each sublayer, because side dependencies can easily become cyclic references when left unchecked, and those are always an architecture violation.

Additionally, in case it helps to understand the logic/disparity behind the rules, there is a reason why this rule was strictly defined for End-User and Orchestration modules and not so for the bottom Core and Foundation Layers: to prevent the distinct lifecycles of each application from interfering with each other. This was because Screen dependencies used to correspond to a strong dependencyso having side references between End-User/Orchestration module Screens implied an indirect dependency on all the referenced modules on the lower layers of that application. However, note that this changed with OutSystems 11, where Screen dependencies are now considered a weak dependency, so you will find that this rule does not strictly apply for the newest OutSystems platform (version 11), mentioning that Screen redirects are an exception to the rule (image taken from this documentation article).


This also explains why the Architecture Canvas doesn't consider the orchestration layer for OutSystems 11 (newest version, image taken from from this documentation article).


Community GuidelinesBe kind and respectful, give credit to the original source of content, and search for duplicates before posting.