FluentResult.RW
1.0.1
dotnet add package FluentResult.RW --version 1.0.1
NuGet\Install-Package FluentResult.RW -Version 1.0.1
<PackageReference Include="FluentResult.RW" Version="1.0.1" />
<PackageVersion Include="FluentResult.RW" Version="1.0.1" />
<PackageReference Include="FluentResult.RW" />
paket add FluentResult.RW --version 1.0.1
#r "nuget: FluentResult.RW, 1.0.1"
#:package FluentResult.RW@1.0.1
#addin nuget:?package=FluentResult.RW&version=1.0.1
#tool nuget:?package=FluentResult.RW&version=1.0.1
Fluent Result
Фреймворк для декларативного управления потоком выполнения в стиле Railway Oriented Programming (ROP).
Он расширяет классический паттерн Result<T> мощными инструментами для ветвления, повторов, fallback-путей и финализации цепочек..
Установка
C помощью менеджера пакетов NuGet
Install-Package FluentResult.RW
С помощь командной строки .NET Core
dotnet add package FluentResult.RW
Ключевые возможности
Condition (ветвления): декларативные методы
DoOr,CastOr,ThenOrдля выбора пути выполнения.Flow: управление основным потоком (
Then,OnFailure,Anyway).Fallback: многоступенчатый failover через
ThenFallback,DoFallback,CastFallback.Retry: гибкие политики повторов (
FixedRetryPolicy,ExponentialRetryPolicy,JitterExponentialRetryPolicy).Lift: мгновенный подъём значений в
Result(ToSuccessResult,ToTaskSuccessResult).
Быстрый старт
var result = 5.ToSuccessResult()
.Then(value => Result.Success(value * 2))
.OnFailure(error => Console.WriteLine($"Ошибка: {error.Message}"))
.Anyway(() => Console.WriteLine("Цепочка завершена"));
if (result.IsSuccess)
Console.WriteLine($"Результат: {result.Value}");
Condition (ветвления)
Пример DoOr:
result.DoOr(
condition: value => value > 10,
whenTrue: () => Console.WriteLine("Больше 10"),
whenFalse: () => Console.WriteLine("10 или меньше")
);
Пример CastOr:
Result<string> stringResult = result.CastOr(
condition: value => value % 2 == 0,
whenTrue: value => Result.Success("Чётное"),
whenFalse: value => Result.Failure(new Error(100, "Нечётное"))
);
Async-версия:
var asyncResult = await result.ToTaskSuccessResult()
.CastOrAsync(
condition: v => v > 0,
whenTrue: v => Task.FromResult(Result.Success("Положительное")),
whenFalse: v => Task.FromResult(Result.Failure(new Error(200, "Отрицательное")))
);
);
Flow
Пример использования Then и OnFailure:
var result = "Hello".ToSuccessResult()
.Then(v => Result.Success(v + " World"))
.OnFailure(error => Console.WriteLine($"Ошибка: {error.Message}"))
.Anyway(() => Console.WriteLine("Финализирующий код"));
Fallback
Пример ThenFallback:
var result = initialResult.ThenFallback(
defaultError: new Error(999, "Все варианты исчерпаны"),
mainPath: value => TryPrimary(value),
fallBackPath: TrySecondary, TryTertiary
);
Retry
Пример DoRetryAsync:
var result = await initialResult.DoRetryAsync(
retryReason: r => !r.IsSuccess,
retryAction: v => SomeOperationAsync(v),
policy: new FixedRetryPolicy(attempts: 3, delay: TimeSpan.FromMilliseconds(200))
);
Принципы дизайна
- Никаких исключений в бизнес-логике — только значения
- Минимум магии — методы отражают намерение, а не FP-термины
- Явные типы — все ошибки описаны, нет
null,bool,TryXYZ
️ Интеграция в архитектуру
Рекомендовано использовать Result<T>:
- В слое UseCase/Application, где обрабатывается бизнес-логика
- В портах и адаптерах — как входной/выходной контракт
- В домене — только при необходимости делегировать ошибки наружу
Связанные ресурсы
| Product | Versions 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. |
-
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.1 | 110 | 1/13/2026 |
| 1.0.0 | 195 | 12/25/2025 |
| 1.0.0-beta.3 | 169 | 7/27/2025 |
| 1.0.0-beta.2 | 70 | 7/19/2025 |
| 1.0.0-alpha.5 | 124 | 7/4/2025 |
| 1.0.0-alpha.4 | 119 | 6/28/2025 |
| 1.0.0-alpha.3 | 144 | 6/22/2025 |
| 1.0.0-alpha.2 | 120 | 6/22/2025 |
| 1.0.0-alpha.1 | 109 | 6/20/2025 |