I want to do the architectural design for a software that can be used integrate various third party software’s (executable) under one platform.
Standard project types will be added to the platform by default. The project type defines the way in which the different software will be executed and their input and output files.
The user can customize the available standard project type and that will be added to the platform as new project type which defines new custom execution flow.
Also it should support easy extension and customization of the features. I read that plug-in based architecture supports both.
What are the advantages and disadvantages of plug-in based architecture? Do we have any better architecture which can be used for this kind of scenario?
Thanks in advance:)
The advantages of a plug-in architecture is obviously the increase in flexibility. This allows other developers to extend your application in ways that did not expect in the first place. Note that there are various plug-in architecture ranging from flexible to extreme flexible.
Plugins provide developers the flexibility to customize site features and functionality. Most plugins allow some settings to be turned on and off and styles such as fonts, colors, and sizes to be changed to match the rest of the site.
A plug-in is a bundle that adds functionality to an application, called the host application, through some well-defined architecture for extensibility. This allows third-party developers to add functionality to an application without having access to the source code.
One of the biggest disadvantages to using plugins is that it can make your website vulnerable to hacking or open to security issues. Generally, this happens with older plugins that are not kept updated by your web designer. These security issues can be quite serious.
The benefits of a pluggable system are
But some of these strengths are also weaknesses:
Designing a good plugin environment has many of the same challenges as designing a good library. If you are producing both the environment and the plugins yourself, then it's not so bad since you can update all the plugins as the environment evolves, but if the plugin api is open to all, then it requires careful planning and execution to get the design right to avoid too many plugin rewrites as the environment evolves.
"Second-system syndrome" described by Fred Brooks advocates that the second system developed is often excessively generic, aiming for ultimate flexibility, sometimes producing a "platform within a platform"/"inner platform effect". A pluggable design is often seen as a way out when requirements are non-existent or underspecified. To compensate, the software is made as flexible as possible to try to handle "whatever comes along".
Appologies if this paints a dreary picture - pluggable systems can be fantastic and offer a lot of strengths, but they come at a high price. Before diving into a pluggable system, it's prudent to draw up requirements for all the plugins that you will need to cover the functionality required. This will then help you decide if the pluggable design is worth the effort, or some simpler approach would serve equally well.
The advantages of a plug-in architecture is obviously the increase in flexibility. This allows other developers to extend your application in ways that did not expect in the first place. Note that there are various plug-in architecture ranging from flexible to extreme flexible. The most flexible one is called a Full Plug-in architecture, which is used in eclipse.
The disadvantage is that to be really flexible you have to develop a solid framework that incorporates loading, unloading and communication between plugins. There will also be a slight performance overhead in communication between plug-ins.
For a discussing on how to create a plug-in architecture take a look at this question.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With