Читабельність важливіша за скорочення
Код пишеться для людей, а не для компілятора
Єдиний стиль у всіх шарах (API, Application, Domain, Infrastructure)
Мінімум магії, максимум явності
PascalCase — класи, record-и, enum-и, public методи
camelCase — локальні змінні, private поля
UPPER_SNAKE_CASE — лише для констант
Назви мають відображати бізнес-сенс, не технічну реалізацію
public class CreateAdCommand
public class AdCreatedEvent
public class PaymentService
1 файл = 1 public тип
Назва файлу = назва класу
public async Task < Result < AdId > > HandleAsync ( CreateAdCommand command )
Дієслово + іменник
Async-методи завжди з суфіксом Async
3. Архітектурні правила (Clean Architecture)
3.1 Заборонені залежності
Domain ❌ Infrastructure
Domain ❌ API
Application ❌ API
API -> Application -> Domain
-> Infrastructure -> Domain
Без Entity Framework
Без HttpContext
Без логування
Тільки бізнес-логіка
public class Ad : AggregateRoot < AdId >
{
public AdTitle Title { get ; private set ; }
public Money Price { get ; private set ; }
}
Приватні сеттери
Інваріанти в конструкторі
public record Money ( decimal Amount , string Currency ) ;
Immutable
Без поведінки з побічними ефектами
Один use case = один handler
Без бізнес-логіки
Без try/catch (обробка глобально)
public sealed class CreateAdHandler : ICommandHandler < CreateAdCommand >
return Result . Fail ( Errors . Ad . NotFound ) ;
Без throw для бізнес-помилок
Тонкі контролери
Жодної логіки
[ HttpPost ]
public async Task < IActionResult > Create ( CreateAdRequest request )
DTO ≠ Domain models
Мапінг через Mapper / Extension methods
public class AdRepository : IAdRepository
EF Core тільки тут
No business rules
Через інтерфейси
Retry / Circuit Breaker
Business errors → Result
Technical errors → Exceptions
Єдиний middleware для помилок
Serilog
CorrelationId у кожному запиті
Без логування персональних даних
var дозволено, якщо тип очевидний
Максимум 120 символів у рядку
Порожній рядок між логічними блоками
AAA pattern
Назви тестів: Method_WhenCondition_ShouldResult
Testcontainers
Реальна база
Static state
God classes
Anemic domain
Catch(Exception)
EditorConfig
StyleCop
Roslyn Analyzers
CI: build fails on style violations
14. Definition of Done (Code)
Code style дотримано
Покрито тестами
No warnings
Reviewed