Recently I have created two UI5 apps using shell -> views and appContainer -> views. Both results in same output. I'm confused when to use Shell, App, Container, Page, View, and SplitApp in UI5.
I would like to know the differences between them.
Also please describe the best practices of using the above containers from your experiences.
Graphical explanation would help a lot in understanding.
Best Answer
You're right, there are a lot of container controls and this can be confusing. So let me give a brief overview:
sap.m.Shell
The shell, no surprise here, is a parent container you can use for views. However, in contrast to other containers, it allows you to limit the app width for large devices. If you want to achieve this for your application, this is your control.
sap.m.App | sap.m.SplitApp
Both, the
sap.m.App
and thesap.m.SplitApp
are probably the most used parent controls. In fact, one of them should always be part of your mobile application as they do some HTML modifications to improve the experience on mobile devices (see sap/ui/util/Mobile.init for details). Of course, they can be a child of any Shell. Furthermore, they are important since they extend asap.m.NavContainer
and therefore offer navigation capabilities. For example, thesap.m.App
has apages
aggregation. By callingto
, you can simply navigate from one page to another (once you are using routing, this is done by the router). Thesap.m.SplitApp
contains two NavContainers. One for the Master Area and another for the Detail Area. In addition, it offers you to manage one background across your application.sap.m.SplitContainer
Talking about containers one should mention the
sap.m.SplitContainer
. Basically, it offers the same capabilities as thesap.m.SplitApp
but since you should have only one App (sap.m.App
orsap.m.SplitApp
) in your application, you can use this control if you want to start a Master/Detail view once you navigate deeper in your application.sap.ui.core.mvc.View
The view (and all of its sub types like
JSView
,XMLView
,HTMLView
) reflect one simple page or area of a page. In contrast to all other containers, a view may have a controller associated and enables you to implement the View/Controller part of MVC.sap.ui.core.Fragment
Fragments are light-weight variants of a view. They are used like views and they behave similar, but have no controller associated by default. However, you can use simple objects with functions as a controller replacement if necessary. Fragments can be used if you have a particular part of the User Interface you want to externalize to a different file (and maybe reuse it multiple times).
Examples
Regarding an architecture of your application, it depends on what you want to display (limited app width, Master/Detail, ...). Almost every combination is possible but I think it is still best practices to have only one App object per application. If you donĀ“t need a feature of one of the Shells you can simply omit it and make your app object the top level container. Some examples for an architecture could look like this:
SplitApp or SplitContainer in a sap.m.Shell
SplitApp or SplitContainer without Shell
sap.m.App in a sap.m.Shell
sap.m.App without any Shell