Application Architecture
As we become more savvy in building applications, it is possible for us to think in more advanced ways about how we are approaching the organization and management of the pieces of the application. This is something that always grows organically, no matter how experienced we become.
In any project, we begin with a rough idea of what we hope to achieve, and we often don't have much more than that to go on. As we attempt to build solutions to the problems we are working to solve, we often discover much more knowledge about the problem, how best to approach it, and what it will take to deliver working software. From these improved understandings comes ideas of how to change and improve our application.
Within the world of software design, "refactoring" is the process of making structural improvements to existing code without changing the function of the code (Wikipedia). The goal of refactoring code is to make the current features easier to maintain and easier to improve. It's important to note that the goal of refactoring is really not to directly improve the performance or quality of features in the software. Rather, refactoring should make it easier to implement performance or quality enhancements. Refactoring is often required before making those kinds of improvements to software due to the nature of writing and revising code.
Refactoring can be a necessary task when we see potential to improve our overall application architecture (our software design). As our experience with a project or problem space grows, we will evolve our approaches to building software. These improvements require us to change the way we write code. Sometimes we will reorganize information, sometimes we will use a different pattern to implement the same feature, and often we will use some combination of those techniques to make planned changes in the software possible.
Understanding what changes to make is a blend of adhering to some general principles of application architecture and software design, as well as bringing new knowledge of the specific problem domain and what the specific project requires. We can always find ways to improve our initial approaches in order to improve our ability to collaborate with others, grow new features, meet new requirements, and evolve alongside the web ecosystem.
Refactoring Goals
In this section we will explore techniques and methods for refactoring software in general, and Vue.js projects in detail. We will review some core concepts for software refactoring and improving the architecture of our applications. We will also look at the concepts and patterns Vue.js utilizes in order to better understand how to work within our chosen framework. Finally, we will practice with a complete Vue.js application that can be improved in several ways.