 Hi, in this lecture we will investigate the repository architecture which is used to decouple related applications or their components that use a single source of data. When we have a system comprising of software components such as separate applications or separate subsystems, these separate units must exchange data. It can be done in a couple of ways. Each component can maintain its own database and pass data to other components upon request or the shared data could be held in a central database or repository that can be accessed by all software components independently. In this case we can use an efficient data-sharing mechanism called repository architectural pattern. Sometimes this approach is called the data-centric approach as the data resides in the center surrounded by the software components. Let's investigate an example of integrated development environment, IDE, such as Visual Studio. When we create a project within Visual Studio, it creates the project repository that is organized as a collection of files and resides inside the directory that holds the name of the project. Of course, everything could be stored within a database, but probably the developers find out that the file-based approach is more efficient in this case. Visual Studio seamlessly integrates a lot of tools so it looks like a single application. First what comes in mind is the code editor. Within Visual Studio you can edit C sharp, html, javascript code. Also we can use UI designer to design the user interface of our software graphically. In order to compile or build a code for a specific platform, the IDE needs to use the code generators. IDE uses .NET code generator to generate .NET applications. If necessary, machine code could be built for different processors. There is a possibility to generate the code dedicated for running within the browser environment. Besides these two major subsystems, the powerful IDE's make use of the code analysis. For example, statistical analysis allows detecting security issues during the coding stage. Report generators can help in automating reporting. If we talk explicitly about Visual Studio, we can talk about the Nougat package manager which allows searching and installing libraries for our software easily. And of course, the modern development environments include Git repository integration. All these tools work absolutely independently. They just need access to the project repository. Another example, the Unreal Engine game development environment. It uses different tools for creating the game assets. It even uses the external Visual Studio development environment itself as a programming tool. For that purpose, the repository contains solution files that are generated by Unreal Engine. Unreal Engine also uses various architectural styles like repository, interpreter and component based approach among others. Let's summarize this topic. When we use the repository pattern, all data in the system is managed in a central repository that is accessible to all system components. Components normally do not interact directly only through the repository. Many tools such as IDE, game engines and other use this approach. Also, you may use this approach in data-driven systems where the glution of data in the repository triggers an action or tool. Components can be independent. We do not need to know the existence of other components. This allows independent tool development. Also, all data can be managed consistently as it resides in a single location. There are some shortcomings as well. The repository is a single point of failure, so the problems in the repository affect the whole system. There may be inefficiencies in organizing all communication through the repository. Because it is more efficient to exchange data between the components directly. Distributing repository across several computers sometimes may be difficult. For example, for sharing the source code repository, we can use Git. It is not so easy with project that include binary data. That's it. Consider this approach if you'd like to use a data-centric approach to solve a problem. Thank you for watching.