Management systems play a central role in almost every company these days. Some of them have evolved past being customer or accounting management systems alone and are now multi-purpose systems responsible for managing almost everything you can think of: customers, documents, projects, orders, accounting, inventory etc. Most companies are forced into changing their management systems at some point though, especially those that have used the same systems for more than 10 or 15 years; these old and often monolithic systems are getting increasingly hard to maintain and adapt to the requirements of today’s management systems.
The goal of this project is to develop a system architecture for an extensible and adaptable management system. The purpose of this system is to be able to assist in the management of everything a company would want to manage while still keeping the application as light weight as possible. This is achieved by developing a highly modular and configurable application able to provide the user with management capabilities through several modules, with separate modules for each specific area such as customer relations or accounting. The main application of this system provides the base infrastructure to support and manage multiple extensions or modules; a selection of modules then provides the user with necessary management capabilities based on his or her responsibilities in the company.
The system architecture is designed to be highly maintainable and able to adapt to future architectural changes with a minimum amount of effort. To achieve an adaptable architecture the system is designed following the SOLID design principles. These principles are analyzed and discussed in detail covering the effect they have on both single classes and the application as a whole. How to properly incorporate these principles in the system on both an overall architecture level and single-class level is also discussed, and some of the key players in achieving this are dependency injection and a high level of code reusability. Microsoft’s new Managed Extensibility Framework is used to support extensibility in the system.