Support for Inheritance

  

Hello,

We are evaluating OutSystems as our main RAD platform. 

We develop applications for our customers, where in, we deliver a configurable application and the customers are expected to extend and configure the product for their final use in production. The extension and configurability can happen at the database or application or client layers.

For example, if we want to deliver an "Idea capture" application where customers track ideas that are reported to them by their consumers, we provide a core application - datamodel, application and client. The customer build a "configuration" layer on top of it - where in they create new tables/objects of their own by inheriting the core application's tables/objects, where in the inherited table/object will simply inherit the attributes, activities (post actions, events) etc and also be able to override any behavior. Same is true with the application layer logic, where in the functions, logic written inn our core application layer can be inherited and extended by customer's configuration layer.

For us to achieve this, where we develop and deliver the core app and each customer places their configuration layer without impacting the underlying core, we need the following for platform to support:

1. inheritance - otherwise, code and datamodel need to be copied over and over

2. modal lock - this will avoid customers making changes to the core, but keep their changes to their configuration layer.

3. re-use - similar to java or c++, the platform should allow reuse of components, functions, data-structures etc

Here are my questions:

1. I hear OutSystems does not support Inheritance - Is that true? If yes, is this a strategic decision or is it atleast in the roadmap?

2. Does OutSystems support ability for companies to write core apps and deliver them to their customers who instead will use the core apps as reference and extendable layers to build their specific configuration? If so, please explain this in a little detail.

I read on OutSystems' website that enterprise apps such as ERP can be build using this platform, so, I am sure the above features are mandated for such applications as well.


Thanks, George.

I read that thread from 2015/2016. I was hoping there is some change on this front with the product since then.

Could you please let me know how you finally went through resolving your scenarios? Thanks again.

I resolved it by asking the forums their opinion and accepting my findings that inheritance is not supported and most likely will not be.

The Outsystems team are super bright and come from the 3GL world so will have made a consensus decision not to support inheritance, undoubtedly it will have been used when creating the platform itself !

How do you explain inheritance to citizen developers? Maybe in shadow IT the use of Inheritance in fast delivery of apps is not seen as important.

IF I had to architect a new large scale enterprise ERP system I still feel I would need inheritance BUT I would contact Outsystems DIRECTLY to consider their opinion and real world experience.



George Jeffcock wrote:

I resolved it by asking the forums their opinion and accepting my findings that inheritance is not supported and most likely will not be.

The Outsystems team are super bright and come from the 3GL world so will have made a consensus decision not to support inheritance, undoubtedly it will have been used when creating the platform itself !

How do you explain inheritance to citizen developers? Maybe in shadow IT the use of Inheritance in fast delivery of apps is not seen as important.

IF I had to architect a new large scale enterprise ERP system I still feel I would need inheritance BUT I would contact Outsystems DIRECTLY to consider their opinion and real world experience.



Thanks again.

Here is a philosophical thought:

What I am observing is that RAD platforms are great for building AN APPLICATION for a specific need. But, if a software vendor were to have a "core app" and have several customers build configuration flavors on top of that core app, then the fundamentals of building such an app with extensibility, modal lock and reuse between apps (module, component) dont appear to be available.

The paradigm that it appears to support is more towards building a app for a custom set of requirements.



General "needs" will turn into dark horses like SAP and are unmaintainable in the end.

As you said, you have different needs for different customs so in a way those are all singulair specific needs applications.


I understand the way of having "general" components for those customers and we call them forge-components.

Especially  with the combinations of tenants you have a rich toolbox to provide such needs without actually have to inherit.

upgrading "standard"components are also a breeze with Outsystems.



I am low code through and through for 20 years, have supported it to the detriment of my career!

But recently working with SAP and Salesforce....and SAP I am afraid was awesome, robust, dependable, blah blah.

I only have a problem with duplicating code (copy and paste) in any coding paradigm, if Outsystems themselves can show how to achieve your goals WITHOUT duplicating code and therefore maintaining the same code in multiple places then I think that would be a result.