Building An Asset Management System With Domain Driven Design
Abstract
It is obvious to agree that the two most important things in a business are creating
and saving money. That’s true for all kinds of businesses, and it also is not the exception for tech companies. According to Tech’s ultimate success: Software developers are now
more valuable to companies than money, Over 300% billion a year for propping up legacy
system and ramifying bad software (handling "technical debt" - over 85% billion dollars
were poured into fixing un-quality code in 2018. Therefore, producing an application with
a clean, flexible, and testable codebase that is willing to change and extend, offering good
performance brings incredible value to the business as it significantly reduces the maintenance cost. For this reason, Will Gaybrick predicts that expertise of software developers
might add approximately 3 trillion dollars to global GDP over the next decade.
Besides, the most complicated aspect of large software doesn’t lie in the implementation but in the real-world domain in which the software operates. Therefore, the more
understanding of the domain, the more successful the software we can develop. Implementing a good code base while capturing deep business domain’s logic and rules is quite
challenging due to the inevitable expansion in application requirements nowadays. Small
systems can be implemented well with a monolithic architecture, but when they expand
with a huge amount of features to adapt to the increasing customer needs, the system’s
complexity increases, which might make the system harder to understand, maintain, or
extend.
For two of these above reasons, building a good domain model with suitable and scalable
architecture, and applying tactical patterns will be the key to implementing a good code
base while managing the system’s complexity. Although it is remarkably valuable for the
software system, it’s not something easy to make. As a research result, the current trend
of building complicated and large software will tackle almost all these problems. It is
building microservice-based applications using domain-driven design patterns, that are
applied successfully to build a large number of popular products in big tech companies
such as Twitter, Netflix, Amazon, SoundCloud, etc.
This thesis researched the essence and main concepts of that trending topic - Domaindriven design approach to build a microservice architecture system. I tried to research
my best to distill out the concepts, advantages, and considerations of microservices versus
monolithic architecture mostly utilized in legacy or small systems. The thesis also emphasizes the role of DDD in modern software development compared to the MVC model
and its alignment with a popular software development methodology nowadays, the agile method. In addition, the essence of microservices also is discussed in section 2 which
brings a general knowledge of those concepts and reveals the comparison of microservices architecture with the monolith and service-oriented architecture. After the concepts
and foundation principles are discussed thoroughly, they will be applied to a case study
- building a microservice-based asset management system to demonstrate the possibility,
potential, and limitations of the research method.