FluentResult.RW 1.0.0-alpha.4

This is a prerelease version of FluentResult.RW.
There is a newer prerelease version of this package available.
See the version list below for details.
dotnet add package FluentResult.RW --version 1.0.0-alpha.4
                    
NuGet\Install-Package FluentResult.RW -Version 1.0.0-alpha.4
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="FluentResult.RW" Version="1.0.0-alpha.4" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="FluentResult.RW" Version="1.0.0-alpha.4" />
                    
Directory.Packages.props
<PackageReference Include="FluentResult.RW" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add FluentResult.RW --version 1.0.0-alpha.4
                    
#r "nuget: FluentResult.RW, 1.0.0-alpha.4"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package FluentResult.RW@1.0.0-alpha.4
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=FluentResult.RW&version=1.0.0-alpha.4&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=FluentResult.RW&version=1.0.0-alpha.4&prerelease
                    
Install as a Cake Tool

Fluent Result

Библиотека для безопасного и выразительного управления результатами операций в .NET, вдохновлённый RailWay-подходом и концепцией "ошибка как значение".

NuGet Version License

Установка FluentResult

C помощью менеджера пакетов NuGet

Install-Package FluentResult.RW

С помощь командной строки .NET Core

dotnet add package FluentResult.RW

Базовая идея

Result<int> result = Parse(input)
    .Then(val => Validate(val))
    .Then(() => SaveToDatabase(val))
    .Do(val => LogSuccess(val))
    .OnFailure(error => LogError(error))
    .Anyway(() => Metrics.Send());

return result;

Основные типы

Класс Семантика
Result Представляет успешный или неуспешный результат без значения.
Result<T> Представляет результат с возвращаемым значением.
Error Представляет ошибку. Может быть создан из строки, исключения или как отдельный тип

Основные методы

Метод Что делает Сигнатура Семантика
Then Преобразует успешное значение T в новое значение T Result<T> → Result<T> Основная трансформация
Do Выполняет побочный эффект на успешном результате (T) Result<T> → Result<T> Логгирование, аудиты и т.д.
Anyway Выполняется всегда, независимо от успеха или ошибки Result<T> → Result<T> Аналог finally, полезен для метрик
Cast Преобразует T в U, меняя тип контейнера Result<T> → Result<U> Преобразование типа
OnFailure Обрабатывает ошибку без изменения значения Result<T> → Result<T> Логгирование ошибок

Примеры использования

Успешная цепочка

Result<string> result = GetUser(id)
    .Then(val => ValidateUser(val))
    .Then(val => SendWelcomeEmail(val));

Ошибка коротит цепочку

Result<string> result = GetUser(id)
    .Then(val => ValidateUser(val)) // Fail → дальше не пойдёт
    .Then(val => SendWelcomeEmail(va;)); // не будет вызван

Обработка побочных эффектов

Result result = Process()
    .Do(val => LogSuccess(va;))
    .OnFailure(error => LogFailure(error))
    .Anyway(() => Metrics.Record());

Изменение типа результата

Result<string> result = GetUser()
    .Cast(user => GetUserEmail(user));

Принципы дизайна

  • Никаких исключений в бизнес-логике — только значения
  • Минимум магии — методы отражают намерение, а не FP-термины
  • Явные типы — все ошибки описаны, нет null, bool, TryXYZ

️ Интеграция в архитектуру

Рекомендовано использовать Result<T>:

  • В слое UseCase/Application, где обрабатывается бизнес-логика
  • В портах и адаптерах — как входной/выходной контракт
  • В домене — только при необходимости делегировать ошибки наружу

Связанные ресурсы

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net8.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.0-beta.3 88 7/27/2025
1.0.0-beta.2 18 7/19/2025
1.0.0-alpha.5 87 7/4/2025
1.0.0-alpha.4 79 6/28/2025
1.0.0-alpha.3 114 6/22/2025
1.0.0-alpha.2 74 6/22/2025
1.0.0-alpha.1 77 6/20/2025