Hi Sai Sai,

One thing you might look into in regards to distribution and deployment is ZPM Package Manager https://github.com/intersystems-community/zpm . It's still under active development, but is already very usable at the moment, you can use it with a self-hosted open source private registry https://github.com/intersystems-community/zpm-registry/ and my consultancy is currently developing a commercial hosted version which will be announced at Virtual Summit next month.

There is an example of an Interoperability packaging at GitHub: https://github.com/intersystems-community/iris-interoperability-template

In terms of deployment, unless you have MASSIVE productions, I would recommend to deploy the whole thing at once even if not everything has changed -- it's just a lot less moving parts and options for errors this way, and you can test deployments on your test server as many times as you like.

Hope this helps!

Sergei Shutov
Managing Director, Banksia Global
https://banksiaglobal.com

I believe it's enough to have [Final] keyword set in deployed mode to give a developer a hint that this class should not be extended.

If you want to enforce this behaviour, I would add a check into each method as a first line , something like

if $this.%ClassName(1)'="My.Class" quit $$$ERROR(50000,"don't extend this class")

Since all code will be deployed, developers will not be able to remove this check easily.

You can also try to add a method-generator, I believe when you have a deployed class with method generator it will not be able to compile a subclass without method generator's source (though I'm not sure).