 All right, now I have shared my screen. Yes, you do have a chair. Give me one second. Okay. All right, everybody We are live now. We got hell you're here talking about the ABP framework open source, so let's let's take it away. Hello. Oh, there you go. Okay Hi, everybody. Today I will introduce an open source project, the ABP framework. Probably some of you have already heard about it or using it in your applications. In any way, I believe that this talk will be useful to understand the need for such a project and what ABP is offering with its next version. I am Halil Ibrahim Kalkan, a software architect and co-founder of Volosoft. I am the lead developer behind the ABP framework. ABP is an open source web application framework for the latest ASP.net core 3.0. ABP provides a complete architecture and a strong infrastructure to create modern web applications. It follows best practices and conventions to provide a solid development experience. First, we should understand why we need to such a project and why we have created it. If you are building your applications on top of the plain ASP.net core, you mostly find you on repeating yourself to build a similar infrastructure again and again. You need to decide on an architecture, say a layered architecture based on domain driven design or clean architecture principles. You will write some action filters or interceptors to automate cross cutting concepts like authorization, validation, exception handling, database transaction management, audit logging, caching and so on. You definitely don't want to repeat these logics in every service method. You need to create base classes, abstractions, integrations, extension methods, helpers, library wrappers to simplify your application code. You will deal with all these infrastructure and much more stuff again and again for every project. For that reason, big enterprises are building their internal application frameworks on top of ASP.net core, but it's hard to build, maintain and document it. This is why most of such works finally fail or no one knows how it works because of the missing documentation. Besides the big enterprises, most of the software development companies don't have such development resources to build the infrastructure themselves. We have created the ABP framework to address this problem and provide a full stick application model and infrastructure for everyone. It's hard and time consuming to select the right tools and build the clean architecture while starting a new application. As a software architect, you need to close the follow the software trends, tools, principles and patterns. You have to build the fundamental solution structure and train your team to align them to follow the same principles and coding styles to create a consistent source code. When you use ABP, fundamentals of the architecture will be already decided and implemented for you. ABP solution model is based on the domain-driven design principles and patterns. DDD offers four fundamental layers, domain, application, presentation and infrastructure. ABP startup templates implement this layering by providing a multi-project solution structure. ABP framework provides infrastructure for your application to implement DDD easier. And finally, ABP documentation supports you to truly implement DDD in your source code. ABP framework is designed to create fully modular applications. It provides infrastructure to distribute your entities, services, APIs, UI components and pages into isolated modules in the development time and bring them together to act as a single application on runtime. We already created pre-built modules like account management, identity management and tenant management. Those are ready to use in your application. Documentation and guides help you in building your own modules. Microservice is another trending approach to create scalable systems both in development time and on runtime. Nive-ABP has been designed microservices in mind. It provides infrastructure to implement common microservice communication patterns easily. It's integrated to the identity server for authentication. Pre-built application modules are designed so that they can be deployed to separate servers or containers with their dedicated databases as independent microservices. We have also created a complete microservice solution sample and documented it to be a reference model. You can check it on the website. Multitenancy is a fundamental architecture to create software-as-a-service solutions. ABP framework and modules provide a complete multi-tenant infrastructure. Tenant determination, automatic data isolation, dynamic database selection, tenant basis setting system and much more are already implemented by the framework. It not only supports to develop multi-tenant applications but also makes your codebase mostly an aware of the multi-tenancy. Pre-built tenant management module provides the application logic and basic UI to manage and create your tenants. ABP framework is not a new project actually, it's the successor of the ASP.NET boilerplate framework. ASP.NET boilerplate has been around for six years. It has been more than 7,000 stars on GitHub and 1.5 million downloads on NuGet. It has been actively used by tens of thousands of developers around the world. We have been working on the next generation of the ASP.NET boilerplate framework for a few years and it's finally here. The first stable version will be released in a few weeks, based on the ASP.NET Core 3. It's a complete rewrite, so we don't use the long name anymore. It's the ABP framework, and the new website is abp.io. It's now more modular and microservice-compatible, supports relational and unreligional databases, provides more options to create composable and distributed systems in addition to simple monolithic web applications. We are very excited to introduce it in the same event, Microsoft launches ASP.NET Core 3. Now, I want to show you how to create a new project based on the ABP framework and make it running in a few seconds. First, I'm entering the ABP.io website. In the Getting Started page, we have two options to create a new project via ABP command line interface CLI, or we can directly download from the website. Once we enter a project name, then we can select an application template or module template to create a reusable module. I select the application template. We have two options as the UI framework for now, MVC and Angular, and we have now two database providers and the framework core supports most of the relational databases and MongoDB. Now, we can create a new project, but in this demo, I will create the project via CLI, ABP, new project name. It's created the complete solution in a few seconds. The solution has been created. I am opening in the Visual Studio. I have a previewed one. It is a multi-project solution, consists of the source code and related unit tests. It's layered based on domain-driven patterns and principles and layers. It's also well documented on the website, so you can easily understand how the solution structure is designed. When I run the application, the solution template includes some of the previewed modules like tenant management and identity management. When I run the solution, yeah, I see the account module. I can enter the username and password. At the startup template, it uses two modules, as I said before. Identity management is used to create and manage roles. Then we can set permissions for each role. That means we can allow to do something in the system for the given role. Also, in the user site, we can set roles for a user. We can create a new user. It also supports multi-tenants out of the box. We can create tenants and use multi-tenants as well. It's localized to a few languages. Okay, that's all. The solution itself actually doesn't contain any user interface component or any functionality I have shown. It uses NuGet packages for all the functionality related to identity management, tenant management, account login and register page. Okay, let's continue. Now I want to highlight some features of the AVP framework as a brief. The main goal of the AVP framework is to make you focus on your own buziness code by handling repeating tasks by conventions. It handles cross-cutting concerns and provides services you need. Let's see a typical application service class to understand how AVP can help you in a very simple code block. AVP provides base classes for ddd elements. In this example class, inherits from the application service. Application service base class provides properties and methods commonly used in the application layer. AVP automatically registers this class to dependency injection container as a transient service. You can use the generic repositories to work with the database. Declarative authorized attribute can be used to check permissions, which are auto policies actually. It is completely integrated into ASP.NET course authorization system and extends it. Unit of work system automatically creates and manages database connection and transaction for you. It rollbacks if your method throws an exception. Otherwise, it saves all chains to the database as a single transaction. It works out of the bugs by convention. It automatically validates the input and throws exception if it is invalid. So you can safely work with the valid input inside your method. It automatically creates and saves audit logs for each method call. So you can then get a detailed report to know which user called which method. Audit log system is very detailed and configurable. It can also save entity and property changes as well. You never handle exceptions manually. AVP handles all exceptions and send an appropriate result to the client. AVP extent ASP.NET course localization systems to make it more dynamic and extensible. Object mapper is used to map objects. It has auto mapper integration out of the bugs and can be replaced by another mapper. AVP also provides some other services useful in the application service. In this way, you only write the code related to your business without repeating yourself. If your application service basically performs crewdrup operations, then you can also inherit from the crewdrup service to get it fully implemented for you. You can then override and customize any method you need. Once you create an application service, you typically want to expose it as an HTTP API by writing an API controller. AVP can automatically create API controllers by conversion based on your method names, input and output types. So most of the times you don't need to manually create API controllers, arrange routes and HTTP methods. Okay, you have created your HTTP API and or let the AVP framework dynamically create it for you. What about when you want to use the API from a client application? AVP can dynamically create JavaScript and C sharp proxies. You can use the client proxies to use the remote HTTP API just like calling a regular method in the client side. You don't deal with authentication, exception handling, JSON serialization, deserialization and point configuration and so on. Notice that it doesn't generate any code. It all handles all in the runtime. You don't have a large machine generated code that you don't understand what it does. Here, two example code that uses the dynamic client proxies. JavaScript code calls the method just like calling a JavaScript function. C sharp client injects the application service interface which is shared with the server. The injected service is a dynamic proxy object which internally performs HTTP calls to the remote server. Then you can use any service method just like calling a local method and you get the result if provided. AVP provides a distributed event box out of the box. Publishing an event is pretty easy. Just inject the ID distributed event box service and use the publish method. Subscribing and consuming an event is also easy. Just implement the ID distributed event handler interface and fill in the handle event method. The rest of the communication and retry mechanisms are handled by the AVP framework. It's integrated to RabbitMQ as the first implementation. We will add more options in the future. AVP is UI framework agnostic. You can use different UI frameworks like ASP.netcore, MVC, Angular, React, VOOGES, or Blazor. It currently has MVC and Angular startup templates. More will come by time. In this section, I will show some of the AVP features for MVC razor page UI option. In a modular application, you typically want to embed your UI components like views or JavaScript files, CSS files, and image into the LS or Muget package. You may want to create application-independent reusable modules with their own entities, services, API, and UI elements. AVP provides a virtual file system that acts as a single file system, but internally can read contents from various resources like physical files, embedded files, or even from dynamic files created on runtime. This is an essential feature when you want to work with files distributed into modules. We have created tag helper wrappers for most of the bootstrap for components like buttons, models, cards, tabs, and so on. In this sample, you see a button and a model dialog called write and using AVP tag helpers. It produces native bootstrap code on runtime. In this way, you write less code to create bootstrap components in your views. It makes possible to get the power of the intelligence. When you want to directly work with the bootstrap code, you are free to write native bootstrap HTML, which cooperates nicely with the AVP tag helpers. In addition to wrappers to bootstrap tag helpers, we thought that creating a regular form requires a lot of boilerplate code. To reduce the code, we have created AVP input tag helper, which generates bootstrap-based, localized, and validated input controls. It understands the input type and can work with the existing attributes to customize the HTML output. Then we thought, why we should define an AVP input tag for each form element when we want to create a simple form? What if we create a single tag helper that gets the model and generates the complete form for us? AVP dynamic form tag helper does exactly this. Creates a complete form for you with a single line of code. It gets all the information from your view model class, handles validation and localization too. The last feature I want to highlight in this talk is the bundling and minification system provided by the AVP framework. You may think that why we need to create another bundling and minification system while we have ASP.NET Core Bundle and Minifier, or GALPORT Grants.js. The main reason is that none of them are modular. None of them can read CSS files inside the DLL. None of them can decide the bundle content on the fly, and actually none of them are easy use. Which bundling and minification system can be simpler than this code? It's just a tag helper directly used in your page or view. It adds given files individually to the page in development time, bundles and minifiers on runtime. It works with the virtual file system out of the box, so you can add an embedded or dynamic resource into your bundle. It can automatically include dependencies to the bundle. That means if you include the library to the bundle that depends on jQuery, it automatically includes jQuery to the bundle if jQuery was not already added to the current page before. That means it rearranges bundles on the fly, can determine the bundle content conditionally. It allows you to create name-up bundles and reuse it in an application or even across multiple applications. It has many more features that are needed to create modular web applications. You can check its documentation. So I highlighted some ABP features that are easy to explain in such a short talk. There are many built-in features and extensibility points waiting for you to discover. Visit ABP.io and follow tutorials to learn it deeply. As the last words, ABP doesn't try to reinvent the well. Instead, it tries to fill the gap between the plain ASP.NET Core and real-world enterprise application development scenarios. It helps you to code in best practices to build maintainable software solutions. Okay, that's all for my talk. If you have any questions, I'm glad to answer them. Yeah, that's a great story. Somebody was asking, Ritesh, Tamara Karis, are there any real use of ABP at the moment? Yes, actually, ABP is the next generation of the ASP.NET boilerplate framework. So it's widely used by thousands of developers for the ABP.io, the next generation. It's in the preview now. We have just upgraded to ASP.NET Core 3 yesterday. Once Microsoft releases it, we immediately upgrade it to latest ASP.NET Core. So we are using it in production, but we don't call it 1.0 for now because it has some lacking documentation and we want to test more. Some of the developers are using the new ABP.io in their production environment, but we don't suggest for a few weeks more than we will release the first stable version for the ABP.io. Awesome. Yeah, people have been saying great presentation. There's a comment here from us, Bob, Western Australia. I've been reading ABP documentation. I'll do the support, swashbuckle integration and open API and swagger UI. Wow, definitely going to give it a go. So yeah, you did a great job presenting all the features of your framework. So that's awesome. So I want to thank you for taking the time for talking about it and showcasing it. I know people were excited. So we're going to hang up here, folks, and we're going to get Martin, who's going to talk about indexing Nougat with Asher Functions. So again, Helio, thank you so much. Thank you very much. And thank you to everybody listening to me. Okay, bye-bye. Thank you so much. Have a good one. I will be back in a bit, folks.