Giter Site home page Giter Site logo

abpframework / abp Goto Github PK

View Code? Open in Web Editor NEW
12.2K 337.0 3.3K 903.52 MB

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 and the ASP.NET Core platforms. Provides the fundamental infrastructure, production-ready startup templates, application modules, UI themes, tooling, guides and documentation.

Home Page: https://abp.io

License: GNU Lesser General Public License v3.0

C# 77.28% CSS 0.40% PowerShell 0.33% JavaScript 4.72% Batchfile 0.01% HTML 8.53% Dockerfile 0.03% Shell 0.02% Smarty 0.01% TypeScript 8.18% 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 ABP Discord server

ABP Framework is a complete infrastructure based on ASP.NET Core to create modern web applications and APIs by following the software development best practices and the latest technologies. Check out https://abp.io

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 quickly understand how ABP works.
  • 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 to develop 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

The Book: Mastering ABP Framework

Written by the creator of ABP Framework, this book will help you to gain a complete understanding of the ABP Framework and modern web application development techniques.

book-mastering-abp-framework

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.

ABP 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 be a part of this project.

Official Links

Support the ABP Framework

Love ABP Framework? Please give a star to this repository ⭐

Discord Channel

You can use this link to join the ABP Community Discord Server: https://discord.gg/abp

ABP Commercial

See also ABP Commercial if you are looking for pre-built application modules, professional themes, code generation tooling and premium support for the ABP Framework.

abp's People

Contributors

armanozak avatar bariscanyilmaz avatar berkansasmaz avatar bnymncoskuner avatar braim23 avatar cotur avatar ebicoglu avatar engincanv avatar enisn avatar erolarkat 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 onurpicakci 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

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

IClock abstraction

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

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.

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.

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.

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.

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.

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.

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.

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

UI notification system

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

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

Online Clients System

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

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.

Fundamental Setting Management

Setting Manager

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

Setting Definition Properties

  • Name
  • DefaultValue
  • VisibleToClients
  • IsInherited
  • Custom Data

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.

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.