Skip to content

Commit d6351f1

Browse files
author
Takahiro Ikeuchi
committed
docs: update Japanese README to enhance descriptions of the Todo class methods, clarify Data Transfer Object (DTO) role, and improve formatting for better readability
1 parent 37e65ad commit d6351f1

File tree

1 file changed

+14
-11
lines changed

1 file changed

+14
-11
lines changed

README.ja_JP.md

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
* [FastAPI](https://fastapi.tiangolo.com/)
1414
* [SQLAlchemy](https://www.sqlalchemy.org/)
1515
* [SQLite](https://www.sqlite.org/index.html)
16-
* [uv](https://github.com/astral-sh/uv)
16+
* [uv](https://github.com/astral-sh/uv) - 高速なPythonパッケージインストーラー兼リゾルバー
1717
* [Docker](https://www.docker.com/)
1818

1919
## プロジェクトのセットアップ
@@ -118,10 +118,11 @@ class Todo:
118118
エンティティの主な特徴:
119119

120120
* 一意の識別子(`id`)を持つ
121-
* 状態を変更できる(`update_title``start``complete`などのメソッド
121+
* 状態を変更できる(例: `update_title`, `update_description`, `start`, `complete` メソッド
122122
* 識別子によって同一性が決定される(`__eq__`メソッドの実装)
123+
* ファクトリメソッド(例: `create`)を通じて生成されることがある
123124

124-
このプロジェクトでは、`id` によってのみインスタンスの同一性を判断するために `__eq__` メソッドを実装しています
125+
このプロジェクトでは、インスタンスの同一性を `id` のみによって判断するため、`__eq__` メソッドを以下のように実装しています
125126

126127
```python
127128
def __eq__(self, obj: object) -> bool:
@@ -230,16 +231,16 @@ class TodoRepositoryImpl(TodoRepository):
230231
existing_todo.description = todo_dto.description
231232
existing_todo.status = todo_dto.status
232233
existing_todo.updated_at = todo_dto.updated_at
233-
existing_todo.completed_at = todo_dto.completed_at
234+
existing_todo.completed_at = todo_dto.completed_at
234235
```
235236

236237
リポジトリインターフェースとは異なり、インフラ層の実装コードには、特定の技術(この例ではSQLite)に依存する詳細が含まれていても問題ありません。むしろ、抽象的なインターフェース定義にとらわれすぎず、具体的な技術名をディレクトリ名(例: `sqlite`)やクラス名に含めることで、その実装がどの技術に基づいているかを明確にすることが推奨されます。
237238

238-
#### 2. Data Transfer Object
239+
#### 2. Data Transfer Object (DTO)
239240

240-
オニオンアーキテクチャでは、内側のレイヤー(ドメイン層)は外側のレイヤー(インフラ層、プレゼンテーション層)に依存しません。そのため、レイヤー間でデータをやり取りする際に、特定のレイヤーの詳細(例えば、インフラ層のデータベースモデル)が他のレイヤーに漏れ出ないように、オブジェクトの変換が必要になることがあります。この変換の役割を担うのがData Transfer Object(DTO)です。
241+
オニオンアーキテクチャでは、内側のレイヤー(ドメイン層)は外側のレイヤー(インフラ層、プレゼンテーション層)に依存しません。そのため、レイヤー間でデータをやり取りする際に、特定のレイヤーの詳細(例えば、インフラ層のデータベースモデル)が他のレイヤーに漏れ出ないように、オブジェクトの変換が必要になることがあります。この変換の役割を担うのがData Transfer Object(DTO)です。DTOは、レイヤー間でデータを転送するために使用されるシンプルなオブジェクトです。
241242

242-
次の `TodoDTO` クラスは、O/R Mapperとして SQL Alchemy の基底クラスを継承しながら、ドメイン層のオブジェクトとの相互変換のためのメソッドを実装したクラスです
243+
`TodoDTO` クラスの例を以下に示します。これは SQLAlchemy のモデル(`Base` を継承)であり、ドメインエンティティ (`Todo`) との間で相互変換を行うメソッド (`to_entity`, `from_entity`) を持ちます
243244

244245
```python
245246
class TodoDTO(Base):
@@ -282,7 +283,6 @@ class TodoDTO(Base):
282283
if todo.completed_at
283284
else None,
284285
)
285-
286286
```
287287

288288
データベースから取得した `TodoDTO` オブジェクト(SQLAlchemyに依存)を、ドメイン層の `Todo` エンティティに変換してからユースケース層に返すことで、ユースケース層がインフラストラクチャ層の詳細に依存することを防ぎます。これにより、リポジトリインターフェースで定義された戻り値の型(`Todo` エンティティ)との整合性も保たれます。
@@ -337,7 +337,9 @@ class CreateTodoUseCaseImpl(CreateTodoUseCase):
337337

338338
```python
339339
class StartTodoUseCaseImpl(StartTodoUseCase):
340-
def execute(self, todo_id: TodoId) -> None:
340+
# ... __init__ ...
341+
342+
def execute(self, todo_id: TodoId) -> Todo:
341343
todo = self.todo_repository.find_by_id(todo_id)
342344

343345
if todo is None:
@@ -351,6 +353,7 @@ class StartTodoUseCaseImpl(StartTodoUseCase):
351353

352354
todo.start()
353355
self.todo_repository.save(todo)
356+
return todo
354357
```
355358

356359
### プレゼンテーション層
@@ -413,8 +416,8 @@ curl --location --request GET 'localhost:8000/todos'
413416
"title": "Implement DDD architecture",
414417
"description": "Create a sample application using DDD principles",
415418
"status": "not_started",
416-
"created_at": 1614006055213,
417-
"updated_at": 1614006055213
419+
"created_at": 1614006055213,
420+
"updated_at": 1614006055213
418421
}
419422
]
420423
```

0 commit comments

Comments
 (0)