Skip to content

Commit

Permalink
working on japanese document
Browse files Browse the repository at this point in the history
  • Loading branch information
tomohisa committed Oct 1, 2023
1 parent d38bb01 commit e200f27
Show file tree
Hide file tree
Showing 8 changed files with 334 additions and 4 deletions.
1 change: 1 addition & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"azureFunctions.projectSubpath": "src\\Sekiban.Testing",
"cSpell.words": [
"appsettings",
"Stöckl"
]
}
2 changes: 1 addition & 1 deletion docs/docfx_project/articles/quick-start.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ To make your own project, you can refer Tutorial Project in `/Tutorials/1.GetSta

If `Executing Project` will use AWS Dynamo DB, add `Sekiban.Infrastructure.Dynamo` Nuget Package.

When `Executing Prject` will be `Web API Project that uses Sekiban.Web API Generator`, it will includes following items.
When `Executing Project` will be `Web API Project that uses Sekiban.Web API Generator`, it will includes following items.

- Add `Sekiban.Web` Nuget Package.
- `Web Dependency Definition` that inherits IWebDependencyDefinition.
Expand Down
4 changes: 2 additions & 2 deletions docs/docfx_project/articles/sekiban-event-sourcing-basics.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ List of Events and states created with Events are most fundamental part of Sekib

And `Command` has two main part of it.
1. Command Data (Usually called `Command`) - Order contents, it usually send from user. Some cases, system can send command for a aggregate (stream) as well.
Commands will need to detarmine which stream Events are written by returning Guid Value on `GetAggregateId();`
Commands will need to determine which stream Events are written by returning Guid Value on `GetAggregateId();`
In Sekiban, validation attribute takes care of most part of validations that you can define its restrictions.

2. Command Handler - Function or Program that take care the Order (Command.) Handler takes care of Consistency Check and making event(s) to save.
Expand Down Expand Up @@ -319,7 +319,7 @@ app.Run();

4. Edit appsettings.json

Here is the appsetting.json for cosmos project.
Here is the appsettings.json for cosmos project.
```json

{
Expand Down
63 changes: 63 additions & 0 deletions docs/docfx_project/articles_ja/intro.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# Sekiban - イベントソーシングとCQRSフレームワークの紹介

## Sekibanとは何ですか?

**Sekiban** は、**イベントソーシングとCQRS** を活用したアプリケーション開発フレームワークです。C# .NET Core 7+を使用して構築され、開発者が宣言的なAPIを使用してイベントソーシング应用を作成することを可能にします。Sekibanは、[Microsoft Azure Cosmos DB](https://azure.microsoft.com/en-us/products/cosmos-db)[Amazon Dynamo DB](https://aws.amazon.com/dynamodb/)などのさまざまなイベントストアをサポートしており、AzureまたはAWS上での展開を容易にします。

## イベントソーシングとCQRSを理解する

このページを見ている皆様は、おそらくすでにイベントソーシングとCQRSについて知っているでしょう。ただし、詳しい解説が必要な場合は、グレッグ・ヤング氏の有益なYouTubeトークが参考になるかもしれません。CQRSとイベントソーシングについての2014年のCode on the Beachイベントでのグレッグのプレゼンテーションの[要旨](https://www.eventstore.com/blog/transcript-of-greg-youngs-talk-at-code-on-the-beach-2014-cqrs-and-event-sourcing)をチェックしてみてください。

私たちは、フレームワークに頼るのではなく、イベントソーシングシステムを自分で作成することをグレッグが提案しているという見解に同意します。なぜなら、自分のフレームワークを構築することで、イベントソーシングの概念についての理解を深めることが可能になるからです。

しかし、多くの開発者はビジネスロジックに集中し、ツールやドキュメントデータベースを迅速に進めることを好みます。クラウド全体でのデータベースの速度とスケーラビリティの最近の進歩を考えると、フレームワークとクラウドソリューションを使用したイベントソーシングはかなり効率的になり得ます。幸いなことに、Sekibanはオープンソースであるため、深く掘り下げたい開発者はリポジトリ内のソースコードで実験することができます。

**免責事項:** フレームワークを使用するにもかかわらず、開発者はイベントソーシングの概念に精通していることが重要です。特に、ローンチ後の成長するユーザーベースとデータセットのクエリパフォーマンスを最適化する際や、それをマイクロサービスに変換したりパフォーマンスを向上させる際には、イベントソーシングとCQRSの適切な知識が必要不可欠です。

## Sekibanの主な機能
効果的で効率的なSekibanを利用して、アプリケーション開発体験を向上させることができます:

- **シンプルなコマンドとイベント:** アプリケーション内での機能作成を容易にする。
- **パブリッシュ専用のコマンドとイベント:** 集約を投影せずにイベントを保存する方法を提供する。
- **楽観的な集約バージョンチェック:** 同時環境での効率的な競合検出を可能にする。
- **イベントバージョン:** 前方互換性の向上を可能にする。
- **シングル/マルチ集約プロジェクション:** 個々の集約レベルと複数の集約レベルの両方でのプロジェクションをサポートする。
- **プロジェクションスナップショット:** 特定の時点でのプロジェクションの状態をキャプチャする能力を提供する。
- **大規模なスナップショットストレージ:** Azure Blob StorageやAmazon S3を使用して大きなスナップショットを収容する。
- **組み込みのテストフレームワーク:** 統合されたスイートを使用してテストを簡素化する。
- **Cosmos DB / Dynamo DBデータストア:** スケーラブルでグローバルに分散したデータストレージソリューションを提供する。
- **テナントパーティション:** テナントに基づいてデータを分離することで、データ管理と取り扱いを容易にする。
- **複数の投影からのクエリ:** より動的なデータ分析のために、範囲のプロジェクションからクエリを可能にする。
- **SwaggerをサポートしたコマンドとクエリWeb APIジェネレーター:** API設計、構築、文書化を効率化する。

これらの機能に加えて、開発者はビジネス面に集中し、不必要な複雑性なく実用的な解決策のためのコマンド、イベント、プロジェクション、テスト、クエリを実装できます。

## 互換性
.NET 7と8に対応しています。
**Cosmos DB**の場合、Sekibanは[階層型のパーティションキー](https://learn.microsoft.com/en-us/azure/cosmos-db/hierarchical-partition-keys?tabs=net-v3%2Cbicep)機能をサポートしています。これにより、テナント(またはルートパーティションキー)、集約タイプ、パーティションキーを作成することにより、Cosmos DBを使用したクエリがより効率的になります。
***Dynamo DB*** をSekibanと共に使用する場合、パーティションキーとソートキーを設定する必要があります。


## Sekibanプロジェクトの規模

Sekibanバージョン0.14の時点で、フレームワークには組み込みのマテリアライズドビュー作成ヘルパー機能はありません。Sekibanのライブプロジェクション機能は、小〜中規模のシステムに適しています。通常、Sekibanはシステムメモリがマルチプロジェクションのデータを収容できるサイズがある限り、ライブプロジェクションを処理できます。
ライブプロジェクションについての詳細な情報は、Anton Stöckl氏の興味深い記事[イベントソーシングとCQRSでのリードモデルのためのライブプロジェクション(英語)](https://medium.com/@TonyBologni/live-projections-for-read-models-with-event-sourcing-and-cqrs-42dd18b19fd0)を参照してください。

開発者は、Cosmos DBの変更フィード機能やDynamo DBの変更フィード機能を使ってマテリアライズドビューを実装することができます。変更フィードを用いたマテリアライズドビューの作成は比較的簡単なプロセスであるにもかかわらず、それはSekiban Frameworkのコア機能に直接関連するものではないため、フレームワークには含まれていません。

## オープンソース

Sekibanは、Apache 2.0ライセンスの下でオープンソースとしてリリースされています。[ライセンス](https://github.com/J-Tech-Japan/Sekiban/blob/main/LICENSE)はこちらからご覧いただけます。このプロジェクトをフォークして、バグを修正したり、新機能を追加したりする開発者の方々を歓迎します。貢献に興味がある方のために、詳細な[貢献ガイドライン](https://github.com/J-Tech-Japan/Sekiban/blob/main/CONTRIBUTING.md)[行動規範](https://github.com/J-Tech-Japan/Sekiban/blob/main/CODE_OF_CONDUCT.md)を提供しています。このプロジェクトはJ-Tech Japanが所有し、その未来の方向性を決定します。

## サポートとトレーニング

J-Tech Japanは、高品質のフレームワークを維持するために、このプロジェクトのスポンサーを歓迎します。トレーニングやセミナーが必要な場合は、ぜひ[[email protected]](mailto:[email protected])までお問い合わせください。

今日からSekibanを使い始めてみてください。[クイックスタートガイド](./quick-start.md)をチェックしてみましょう。







59 changes: 59 additions & 0 deletions docs/docfx_project/articles_ja/quick-start.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# 早速始めましょう

## 実験してみよう。

迅速に始めるために、まずはすでに設定されたプロジェクトを使ってsekibanをテストしてみることをおすすめします。

リポジトリ内の`/Tutorials/1.GetStarted` フォルダにあります。

### GetStarted Solutionを開く。

Get Started .NET 7で作成されています。試す方法は複数あります。

1. Cosmos DBを使用 [Cosmos DBを使って試す](./test-out-cosmos.md)
2. Dynamo DBを使用 [Dynamo DBを使って試す](./test-out-dynamo.md)


### 自身のSekiban Projectを作成する。

基本的に、自分のプロジェクトを作成するためには3つのプロジェクトが必要です。

自分のプロジェクトを作成するためには、`/Tutorials/1.GetStarted` フォルダ内のチュートリアルプロジェクトを参考にできます。

1. Domain Project。このプロジェクトは通常、Aggregate、Command、Event、Projection、Queryなどのコアなイベントソーシングの内容のみを含みます。

Domain Projectは`Sekiban.Core` Nugetパッケージを追加します。

Domain Projectは Aggregate、Command、Event、Projection、Queryなどを含みます。

Domain Projectには Domain Dependency Definitionが含まれています。

2. Test Project。このプロジェクトはDomain Projectをテストします。

Test Projectは Domain Projectを参照します。

Test Projectは Sekiban.Testing Nugetパッケージを追加します。

Test Projectには Aggregate Test および/または Unified Testが含まれています。

3. Executing Project。このプロジェクトはコンソールアプリケーション、Webアプリケーション、ファンクションアプリケーション、またはその他の実行形式のアプリケーションです。多くの場合、Domain ProjectにアクセスするためのWeb APIインターフェースになります。

Executing Projectは Domain Projectを参照します。

Executing Projectは Infrastructure projectを追加します。現在、Sekibanは Azure
Cosmos DB および AWS Dynamo DBをサポートしています。

Executing ProjectがAzure Cosmos DBを使用する場合は、`Sekiban.Infrastructure.Cosmos` Nugetパッケージを追加します。

Executing ProjectがAWS Dynamo DBを使用する場合は、`Sekiban.Infrastructure.Dynamo` Nugetパッケージを追加します。

Executing Projectが Sekiban.Web API Generatorを使用したWeb API Projectとなる場合は、以下の項目が含まれます。

- Sekiban.Web Nugetパッケージを追加します。
- IWebDependencyDefinitionを継承した Web Dependency Definition。
- Program.csは Sekiban.Core 設定として`AddSekibanCoreWithDependency`を持つ。
- Program.csはインフラ設定として`AddSekibanCosmosDB`を持つ。
- Program.csは Web 設定として`AddSekibanWeb`を持つ。


これらは基本的なプロジェクト設定です。詳細情報は [Sekiban Event Sourcing Basics](./sekiban-event-sourcing-basics.md) でフォローされます。
Loading

0 comments on commit e200f27

Please sign in to comment.