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.
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" />
<PackageReference Include="FluentResult.RW" />
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
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#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
#tool nuget:?package=FluentResult.RW&version=1.0.0-alpha.4&prerelease
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
Fluent Result
Библиотека для безопасного и выразительного управления результатами операций в .NET, вдохновлённый RailWay-подходом и концепцией "ошибка как значение".
Установка 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 | 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. |
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 |