d48cda4081
CI / Test (ubuntu-latest, Node 18.x, bun) (push) Failing after 15m1s
CI / Test (ubuntu-latest, Node 18.x, npm) (push) Failing after 15m1s
CI / Test (ubuntu-latest, Node 18.x, pnpm) (push) Failing after 15m1s
CI / Test (ubuntu-latest, Node 18.x, yarn) (push) Failing after 15m1s
CI / Test (ubuntu-latest, Node 20.x, bun) (push) Failing after 17m13s
CI / Test (ubuntu-latest, Node 20.x, npm) (push) Failing after 18m42s
CI / Test (ubuntu-latest, Node 20.x, pnpm) (push) Failing after 15m0s
CI / Test (ubuntu-latest, Node 20.x, yarn) (push) Failing after 49m44s
CI / Test (ubuntu-latest, Node 22.x, bun) (push) Failing after 51m55s
CI / Test (ubuntu-latest, Node 22.x, pnpm) (push) Failing after 21m57s
CI / Test (ubuntu-latest, Node 22.x, npm) (push) Failing after 37m39s
CI / Test (ubuntu-latest, Node 22.x, yarn) (push) Failing after 34m7s
CI / Validate Components (push) Failing after 37m15s
CI / Python Tests (push) Failing after 10m1s
CI / Security Scan (push) Failing after 10m1s
CI / Lint (push) Failing after 17m12s
CI / Coverage (push) Failing after 20m19s
CI / Test (macos-latest, Node 18.x, bun) (push) Has been cancelled
CI / Test (macos-latest, Node 18.x, npm) (push) Has been cancelled
CI / Test (macos-latest, Node 18.x, pnpm) (push) Has been cancelled
CI / Test (macos-latest, Node 18.x, yarn) (push) Has been cancelled
CI / Test (windows-latest, Node 18.x, npm) (push) Has been cancelled
CI / Test (windows-latest, Node 18.x, pnpm) (push) Has been cancelled
CI / Test (windows-latest, Node 18.x, yarn) (push) Has been cancelled
CI / Test (macos-latest, Node 20.x, bun) (push) Has been cancelled
CI / Test (macos-latest, Node 20.x, npm) (push) Has been cancelled
CI / Test (macos-latest, Node 20.x, pnpm) (push) Has been cancelled
CI / Test (macos-latest, Node 20.x, yarn) (push) Has been cancelled
CI / Test (windows-latest, Node 20.x, npm) (push) Has been cancelled
CI / Test (windows-latest, Node 20.x, pnpm) (push) Has been cancelled
CI / Test (windows-latest, Node 20.x, yarn) (push) Has been cancelled
CI / Test (macos-latest, Node 22.x, bun) (push) Has been cancelled
CI / Test (macos-latest, Node 22.x, npm) (push) Has been cancelled
CI / Test (macos-latest, Node 22.x, pnpm) (push) Has been cancelled
CI / Test (macos-latest, Node 22.x, yarn) (push) Has been cancelled
CI / Test (windows-latest, Node 22.x, npm) (push) Has been cancelled
CI / Test (windows-latest, Node 22.x, pnpm) (push) Has been cancelled
CI / Test (windows-latest, Node 22.x, yarn) (push) Has been cancelled
51 lines
1.6 KiB
Markdown
51 lines
1.6 KiB
Markdown
---
|
|
paths:
|
|
- "**/*.cs"
|
|
- "**/*.csx"
|
|
---
|
|
# C# パターン
|
|
|
|
> このファイルは [common/patterns.md](../common/patterns.md) を C# 固有のコンテンツで拡張します。
|
|
|
|
## API レスポンスパターン
|
|
|
|
```csharp
|
|
public sealed record ApiResponse<T>(
|
|
bool Success,
|
|
T? Data = default,
|
|
string? Error = null,
|
|
object? Meta = null);
|
|
```
|
|
|
|
## リポジトリパターン
|
|
|
|
```csharp
|
|
public interface IRepository<T>
|
|
{
|
|
Task<IReadOnlyList<T>> FindAllAsync(CancellationToken cancellationToken);
|
|
Task<T?> FindByIdAsync(Guid id, CancellationToken cancellationToken);
|
|
Task<T> CreateAsync(T entity, CancellationToken cancellationToken);
|
|
Task<T> UpdateAsync(T entity, CancellationToken cancellationToken);
|
|
Task DeleteAsync(Guid id, CancellationToken cancellationToken);
|
|
}
|
|
```
|
|
|
|
## オプションパターン
|
|
|
|
コードベース全体で生の文字列を読み取る代わりに、設定に強く型付けされたオプションを使用する。
|
|
|
|
```csharp
|
|
public sealed class PaymentsOptions
|
|
{
|
|
public const string SectionName = "Payments";
|
|
public required string BaseUrl { get; init; }
|
|
public required string ApiKeySecretName { get; init; }
|
|
}
|
|
```
|
|
|
|
## 依存性注入
|
|
|
|
- サービス境界でインターフェースに依存する
|
|
- コンストラクタを集中させる。サービスに依存関係が多すぎる場合は責任を分割する
|
|
- ライフタイムを意図的に登録する: ステートレス/共有サービスにはシングルトン、リクエストデータにはスコープ、軽量な純粋ワーカーにはトランジエント
|