Are you a leader in an enterprise software development organization, interested in producing quality software? Have you experienced the challenges in managing software projects - satisfying customers' needs to produce software faster, but yet at the same time, facing quality issues?
Have you seen systems which rapidly deteriorated in quality, whereby the architecture is a "big ball of mud", and low code quality - and the decreased productivity of the whole team? Is there an increasing pile of bugs, and are changes taking longer and longer to implement, breaking existing functionality? Do you face challenges in incorporating new team members, increasing the technical level of your team, and incorporating code standards and quality control?
Are you looking for a solution which will enable you to:
- Implement high quality enterprise software in your software teams
- Increase the productivity across your team, from junior to senior level
- Support extensible and maintainable architecture to reduce total development cost
If you've answered "yes", then you've come to the right place. Welcome to Optivem Open Source Software (OSS). Our goal is to support you in quality Enterprise Application Software (EAS) development.
The underlying architecture for our projects is based on the "Clean Architecture" approaches:
- Hexagonal Architecture, aka. Ports and Adapters (Alistair Cockburn, 2005)
- Onion Architecture (Jeffrey Palermo, 2008)
- Clean Architecture (Robert C. Martin, 2012)
For an introductory overview, we recommend DDD, Hexagonal, Onion, Clean, CQRS, … How I put it all together.
The key concept is the separation of concerns:
- Application Core contains application logic (Application Layer) and domain logic (Domain Layer)
- Presentation Layer contains GUI Views and Controllers, REST Controllers, SOAP Controllers, Console Commands
- Infrastructure Layer contains Databases, Email, Messaging, and any other external agencies
The dependencies are as follows:
- The Application Core is independent of everything else (i.e. the Application Core does not know about the Presentation Layer nor the Infrastructure Layer)
- The Presentation Layer sends commands to the Application Core
- The Infrastructure Layer contains implementation for communicating with the database (e.g. via ORM, sending emails, sending messages to message queues, etc.)
But, given the independence above, how do they communicate? The answer is: Inversion of Control (IoC) - Dependency Injection (DI). For example, the Application Core defines interfaces for communicating with a database (i.e. Repository interfaces), and inside the Infrastructure layer, the Repository interfaces are implemented (e.g. using ORM frameworks or any other mechanisms).
The core benefits is that due to the independence of the Application Core, it ensures separation of concerns and modulaity, swappability of databases, UIs and any frameworks, and also enables the system to be testable. These factors increase system quality and decreasing overall total development and maintenance cost.
The Optivem Framework is designed to support the Clean Architecture, enabling:
- Modularity & re-usability
- Extensibility & flexibility
- Maintainability & testibility
- Scalability and portability
The Optivem Framework is on GitHub and NuGet:
To show the Optivem Framework usage, we developed a sample application using the well-known Northwind database from Microsoft, as an illustration relevant for enterprise software samples:
Optivem Framework and Optivem Northwind are licensed under the MIT licence, so that it can be used freely for commercial projects. Our goal is to help spread best practices in IT organizations and support developers in their daily work.
The following are the applications and technologies installed, which are required to run the projects above:
- .NET Core 2.2 projects: we installed Microsoft .NET Core SDK 2.2.104 and used Visual Studio Community 2017 Version 15.9.4 for the development. For databases, we used SQL Server 2017 Developer and SQL Server Management Studio 17.9.1.
- Angular 7 projects: we installed Node.js and Angular 7 CLI. We used Visual Studio Code, Chrome and the Debugger for Chrome (Visual Studio Code Extension) .
- Additional tools used include: GitHub Desktop, Postman 6.6.1 and Notepad++.
- Visual Studio Extensions: GitHub Extension for Visual Studio, CodeMaid, SpecFlow for Visual Studio 2019
- Visual Studio Installer: ASP.NET and web development, Visual Studio extension development, .NET Compiler Platform SDK, DGML editor
You can send questions, improvement suggestions and issue reports on GitHub. These will be used to further improve our open source software.
Licensed under the MIT license.
Copyright © 2019 Optivem All Rights Reserved.