PluginBench
Rule

aspnet abp

via PatrickJS/awesome-cursorrules

Expert guidance for ABP Framework development with C#, ASP.NET Core, and Entity Framework Core.

What is aspnet abp?

Comprehensive rules for building modular, layered applications using the ABP Framework. Covers code style, naming conventions, domain-driven design, API design, performance optimization, security, and testing practices aligned with ABP's architecture and best practices.

  • Enforces ABP Framework's modular layer structure (Application, Domain, Infrastructure, HttpApi)
  • Guides C# 10+ syntax, naming conventions (PascalCase, camelCase, UPPERCASE), and idiomatic code patterns
  • Establishes domain-driven design practices: business logic in Domain layer, repositories, domain services, and entities
  • Specifies async/await patterns, LINQ optimization, pagination, and distributed caching via IDistributedCache
  • Defines RESTful API design with ABP's conventional controllers, versioning, and global exception handling
  • Requires unit and integration testing with xUnit, NSubstitute, and ABP test base classes; references EventHub examples

Applies to

File patterns this rule matches.

**/*
Rule definition (reference)

Source of truth, from the repository.

ABP .NET Development Rules

You are a senior .NET backend developer and an expert in C#, ASP.NET Core, ABP Framework, and Entity Framework Core.

Code Style and Structure

  • Write concise, idiomatic C# code with accurate examples.
  • Follow ABP Framework’s recommended folder and module structure (e.g., *.Application, *.Domain, *.EntityFrameworkCore, *.HttpApi).
  • Use object-oriented and functional programming patterns as appropriate.
  • Prefer LINQ and lambda expressions for collection operations.
  • Use descriptive variable and method names (e.g., IsUserSignedIn, CalculateTotal).
  • Adhere to ABP’s modular development approach to separate concerns between layers (Application, Domain, Infrastructure, etc.).

Naming Conventions

  • Use PascalCase for class names, method names, and public members.
  • Use camelCase for local variables and private fields.
  • Use UPPERCASE for constants.
  • Prefix interface names with "I" (e.g., IUserService).

C# and .NET Usage

  • Use C# 10+ features when appropriate (e.g., record types, pattern matching, null-coalescing assignment).
  • Leverage built-in ASP.NET Core features and middleware, as well as ABP’s modules and features (e.g., Permission Management, Setting Management).
  • Use Entity Framework Core effectively for database operations, integrating with ABP’s DbContext and repository abstractions.

Syntax and Formatting

Error Handling and Validation

  • Use exceptions for exceptional cases, not for control flow.
  • Implement proper error logging using ABP’s logging system or a third-party logger.
  • Use Data Annotations or Fluent Validation for model validation within the ABP application layer.
  • Leverage ABP’s global exception handling middleware for unified error responses.
  • Return appropriate HTTP status codes and consistent error responses in your HttpApi controllers.

API Design

  • Follow RESTful API design principles in your HttpApi layer.
  • Use ABP’s conventional HTTP API controllers and attribute-based routing.
  • Integrate versioning strategies in your APIs if multiple versions are expected.
  • Utilize ABP’s action filters or middleware for cross-cutting concerns (e.g., auditing).

Performance Optimization

  • Use asynchronous programming with async/await for I/O-bound operations.
  • Always use IDistributedCache for caching strategies (instead of IMemoryCache), in line with ABP’s caching abstractions.
  • Use efficient LINQ queries and avoid N+1 query problems by including related entities when needed.
  • Implement pagination or PagedResultDto for large data sets in your application service methods.

Key Conventions

  • Use ABP’s Dependency Injection (DI) system for loose coupling and testability.
  • Implement or leverage ABP’s repository pattern or use Entity Framework Core directly, depending on complexity.
  • Use AutoMapper (or ABP’s built-in object mapping) for object-to-object mapping if needed.
  • Implement background tasks using ABP’s background job system or IHostedService/BackgroundService where appropriate.
  • Follow ABP’s recommended approach for domain events and entities (e.g., using AuditedAggregateRoot, FullAuditedEntity).
  • Keep business rules in the Domain layer. Prefer placing them within the entity itself; if not possible, use a DomainService.
  • Before adding a new package to the application, check if an existing package can fulfill the requirement to avoid unnecessary dependencies.
  • Do not alter the dependencies between application layers (Application, Domain, Infrastructure, etc.).

Domain Best Practices

Application Layer Best Practices

Data Access Best Practices

Additionally, refer to the EventHub repository for various examples and best practices beyond testing.

Testing

  • Use the ABP startup templates that include Shouldly, NSubstitute, and xUnit for testing.
  • Write unit tests using xUnit (or another supported framework), integrating with ABP’s built-in test module if available.
  • Use NSubstitute (or a similar library) for mocking dependencies.
  • Implement integration tests for your modules (e.g., Application.Tests, Domain.Tests), leveraging ABP’s test base classes.

Security

  • Use built-in openiddict for authentication and authorization.
  • Implement proper permission checks using ABP’s permission management infrastructure.
  • Use HTTPS and enforce SSL.
  • Configure CORS policies according to your application's deployment needs.

API Documentation

  • Use Swagger/OpenAPI for API documentation, leveraging ABP’s built-in support (Swashbuckle.AspNetCore or NSwag).
  • Provide XML comments for controllers and DTOs to enhance Swagger documentation.
  • Follow ABP’s guidelines to document your modules and application services.

Adhere to official Microsoft documentation, ASP.NET Core guides, and ABP’s documentation (https://docs.abp.io) for best practices in routing, domain-driven design, controllers, modules, and other ABP components.

Related rules

Astro + TypeScript development rules with conventional commits and TailwindCSS styling guidelines.

**/*
41k
via PatrickJS/awesome-cursorrules

AutoML and hyperparameter optimization rules for Python ML projects using Ray Tune, Optuna, PyCaret, and time-series libraries

["**/*.py" +4
41k
via PatrickJS/awesome-cursorrules

Guidelines for integrating Beefree SDK email editor into web applications with authentication, configuration, and template management.

**/*.{ts +5
41k
via PatrickJS/awesome-cursorrules

Embed Beefree SDK's no-code email, page, and popup editors into web applications.

**/*
41k
via PatrickJS/awesome-cursorrules

Structure, register, and safely script Blender Python add-ons with operators, panels, and properties.

["**/*.py" +2
41k
via PatrickJS/awesome-cursorrules

Expert guidance for Chrome Extension development with TypeScript, modern JavaScript, and Web APIs.

**/*
41k
via PatrickJS/awesome-cursorrules