Coder Social home page Coder Social logo

abpframework / abp Goto Github PK

View Code? Open in Web Editor NEW
12.5K 333.0 3.4K 1.05 GB

Open-source web application framework for ASP.NET Core! Offers an opinionated architecture to build enterprise software solutions with best practices on top of the .NET. Provides the fundamental infrastructure, cross-cutting-concern implementations, startup templates, application modules, UI themes, tooling and documentation.

Home Page: https://abp.io

License: GNU Lesser General Public License v3.0

C# 76.76% CSS 0.42% PowerShell 0.33% JavaScript 4.75% Batchfile 0.01% HTML 9.07% Dockerfile 0.03% Shell 0.02% Smarty 0.01% TypeScript 8.13% Go 0.10% SCSS 0.31% Less 0.08%
abp csharp aspnetcore domain-driven-design multi-tenancy architecture framework dotnet-core c-sharp aspnet-core

abp's Introduction

ABP Framework

build and test ๐Ÿ”น codecov ๐Ÿ”น NuGet ๐Ÿ”น NuGet (with prereleases) ๐Ÿ”น MyGet (nightly builds) ๐Ÿ”น NuGet Download ๐Ÿ”น Code of Conduct ๐Ÿ”น CLA Signed ๐Ÿ”น Discord Shield

ABP Framework is a complete infrastructure based on ASP.NET Core that creates modern web applications and APIs by following the software development best practices and the latest technologies.

ABP Platform

Getting Started

  • Quick Start is a single-part, quick-start tutorial to build a simple application with the ABP Framework. Start with this tutorial if you want to understand how ABP works quickly.
  • Getting Started guide can be used to create and run ABP-based solutions with different options and details.
  • Web Application Development Tutorial is a complete tutorial on developing a full-stack web application with all aspects of a real-life solution.

Quick Start

Install the ABP CLI:

> dotnet tool install -g Volo.Abp.Cli

Create a new solution:

> abp new BookStore -u mvc -d ef

See the CLI documentation for all available options.

UI Framework Options

Database Provider Options

What ABP Provides?

ABP provides a full stack developer experience.

Architecture

ABP offers a complete, modular and layered software architecture based on Domain Driven Design principles and patterns. It also provides the necessary infrastructure and guidance to implement this architecture.

ABP Framework is suitable for microservice solutions as well as monolithic applications.

Infrastructure

There are a lot of features provided by the ABP Framework to achieve real-world scenarios easier, like Event Bus, Background Job System, Audit Logging, BLOB Storing, Data Seeding, Data Filtering, etc.

Cross-Cutting Concerns

ABP also simplifies (and even automates wherever possible) cross-cutting concerns and common non-functional requirements like Exception Handling, Validation, Authorization, Localization, Caching, Dependency Injection, Setting Management, etc.

Application Modules

ABP is a modular framework and the Application Modules provide pre-built application functionalities;

  • Account: Provides UI for the account management and allows user to login/register to the application.
  • Identity: Manages organization units, roles, users and their permissions based on the Microsoft Identity library.
  • OpenIddict: Integrates to OpenIddict.
  • Tenant Management: Manages tenants for a multi-tenant (SaaS) application.

See the Application Modules document for all pre-built modules.

Startup Templates

The Startup templates are pre-built Visual Studio solution templates. You can create your own solution based on these templates to immediately start your development.

Mastering ABP Framework Book

This book will help you to gain a complete understanding of the ABP Framework and modern web application development techniques. It is written by the creator and team lead of the ABP Framework. You can buy from Amazon or Packt Publishing. Find further info about the book at abp.io/books/mastering-abp-framework.

book-mastering-abp-framework

The Community

ABP Community Web Site

The ABP Community is a website to publish articles and share knowledge about the ABP Framework. You can also create content for the community!

Blog

Follow the ABP Blog to learn the latest happenings in the ABP Framework.

Samples

See the sample projects built with the ABP Framework.

Want to Contribute?

ABP is a community-driven open-source project. See the contribution guide if you want to participate in this project.

Official Links

Support ABP

GitHub repository stars are an important indicator of popularity and the size of the community. If you like ABP Framework, support us by clicking the star โญ on the repository.

Discord Server

We have a Discord server where you can chat with other ABP users. Share your ideas, report technical issues, showcase your creations, share the tips that worked for you and catch up with the latest news and announcements about ABP Framework. Join ๐Ÿ‘‰ https://discord.gg/abp.

abp's People

Contributors

armanozak avatar bariscanyilmaz avatar berkansasmaz avatar bnymncoskuner avatar braim23 avatar cotur avatar ebicoglu avatar engincanv avatar enisn avatar erolarkat avatar gizemmutukurt avatar gterdem avatar hikalkan avatar honurbu avatar ilkayilknur avatar ismcagdas avatar mahmut-gundogdu avatar malikmasis avatar maliming avatar masumulu28 avatar mehmet-erim avatar muhammedaltug avatar realliangshiwei avatar salihozkara avatar sinan997 avatar skoc10 avatar stsrki avatar thediaval avatar voloagent avatar yekalkan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

abp's Issues

Interception

Requirement

We need interception for two purposes;

Cutting Edge code

Especially needed for non-web projects. Because, they can be done via AspNet Core filters in a web project.

  • Auditing
  • Authorization
  • Unit of work
  • Validation

Dynamic proxying

  • Dynamic c# proxies to call remote methods

Ideas

Veawing

  • Mono.Cecil: Best performance, independent, supports .NetStandard (it's still beta). Hard to implement.
  • Fody: Does not support .NetStandard and probably will not be in a short time.

DynamicProxying

  • Rely on Castle Windsor (which does not support .NetStandard yet) for AutoFac. It's also DI framework depended.
  • TODO: Seach for alternatives.

Per tenant services

Requirement

We need to able to use different implementations for same service per tenant. Autofac support it. We may provide a way to select a service implementation based on the current tenant name.

IClock abstraction

  • Should be injectable, rather than a static instance.
  • Check if AspNet Core or MS provides such an abstraction.

Detailed Audit System

Functionality

  • Log all requests just like in old ABP.
  • Log all entity changes just like in old ABP.

Additional

  • logs can be sent to different destinations (like to elastic search...).
  • Audit log module will have its own dbcontext and layers.
  • Allow to easier contribute to audit logging.

Also investigate this project: https://github.com/thepirat000/Audit.NET

Logging

Make logging works with a real logger, like log4net or serilog.

Abp.Identity.Application layer

Specifications

  • It will be the application layer which will contain application services for Abp.Identity.
  • It can be able to be consumed as REST style remote API.
  • It can be used as services to be injected by a 3-layer MVC application controllers.
  • It can be deployed as a microservice.

Should be developed based on #53

Functionality

  • User app service: CRUD for users including their roles. Also unit tests.
  • Role app service: CRUD for roles. Also unit tests.
  • Rename Abp.Identity to Abp.Identity.Domain.
  • Create Abp.Identity.Domain.Shared dll and move consts and enums here.
  • Add data annotation properties to Dtos.

Distributed Event Bus

IDistributedEventBus abstraction

  • Publishes events

LocalDistributedEventBus

  • Publishes events using IEventBus

RabbitMQ Integration

  • Implements IDistributedEventBus and publish events to RabbitMQ
  • Receive events of RabbitMQ, dispatches them to subscribers, acknowledges the message then.

Basic Unit Of Work

  • Begin/Commit/Rollback unit of work which can contain multiple database connection and/or multiple dbcontext
  • Support multiple ORM in a UOW.
  • Implement UOW via EF Core

AspNet Core UOW filter/middleware & UOW improvements

General Requirements

  • Ensure that ambient UOW scope works properly.
  • Nested unit of works.
  • Should be lazy. That means actually it does nothing until a real database operation is needed.
  • Pass HttpContext.RequestAborted to UOW.Complete automatically.

AspNet Core Middleware & ActionFilter

  • Should be located just before UseMvc() as a middleware.
  • Reservation option to reserve a started UOW for later usage. Reserved by middleware and obtained by action filter.
  • UOW Action filter should be able to work without middleware too.
  • Should allow ActionFilter to control UOW properties (like istransactional, transaction isolation level etc)
  • Should allow to rollback UOW without throwing exception.
  • Should allow exception filter to rollback uow/transaction on error.
  • Middleware completes the transaction/uow if no rollback and no error.
  • What if we have exception on razor view execution..?
  • If we have an exception on commit stage in the middleware, we should handle it as just like in ActionFilter, so client side gracefully handle it.

EF Core

  • Create unit test with SQLite in memory.
  • Create unit test with multiple dbcontextes (with same connstring) share same transaction.

Online Clients System

like in ABP1. But should consider web farm scenarios better. Create AspNet Core SignalR implementation.

Multiple DB + Multiple Context + MultiTenancy

Should support;

  • Each dbcontext can have different connection string. (uses default if not wanted)
  • Implement module-name / database-name logic to be used on conn string resolving.
  • On database per tenant, each tenant can have different connection string. (uses same db if not wanted)
    together in multitenancy.

Object Mapping abstraction

Like in ABP1. But also;

  • Abstraction: IObjectMapper
  • AutoMapper integration as default mapper: AutoMapperObjectMapper
  • Allow to register special mapper classes per object-to-object (IObjectMapper<TSource,TDestination>), which overrides default mapper if defined.

Fundamental Setting Management

Setting Manager

  • Get settings
  • Set settings
  • Extensibility (chain of resp. pattern)

Setting Definition Properties

  • Name
  • DefaultValue
  • VisibleToClients
  • IsInherited
  • Custom Data

Basic server side modularity

  • Load modules beginning from startup module
  • Integrate to AspNet Core Startup class
  • Make running in a Console application
  • Load plugin modules

UI notification system

Similar to ABP1 notification system.
Real time system will be implemented by SignalR Core.

Connection string per module

  • A module / database access object (like DbContext for EF) can declare a database name.
  • Get module specific connection string using database name. Design it to easily be used with other database api providers.

ICurrentUser

  • Should be more and easier extensible, by extension methods?.
  • It should work by claims by default.

By default, it will only contain UserId. TenantId, Impersonator informations, organization units... should all be extensions.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.