From 3d389b3c6940786b2441594ff5522d684ef9c69b Mon Sep 17 00:00:00 2001 From: "Kouhei.Sano" Date: Fri, 5 Apr 2024 16:22:22 +0900 Subject: [PATCH] chore: Update README --- README.ja.md | 13 ++++++++----- README.md | 29 ++++++++++++++++++++--------- 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/README.ja.md b/README.ja.md index 794e3ca9..37500258 100644 --- a/README.ja.md +++ b/README.ja.md @@ -4,6 +4,8 @@ `Ray.MediaQuery`はDBやWeb APIなどの外部メディアのクエリーのインターフェイスから、クエリー実行オブジェクトを生成しインジェクトします。 +## モチベーション + * ドメイン層とインフラ層の境界を明確にします。 * ボイラープレートコードを削減します。 * 外部メディアの実体には無関係なので、後からストレージを変更することができます。並列開発やスタブ作成が容易です。 @@ -249,11 +251,12 @@ $this->bind(DateTimeInterface::class)->to(UnixEpochTime::class); ### VO -`DateTime`以外のバリューオブジェクトが渡されると`toScalar`インターフェイスを実装した`ToScalar()`メソッド、もしくは`__toString()`メソッドの返り値が引数になります。 +`DateTime`以外のバリューオブジェクトが渡されると`ToScalar`インターフェイスを実装した`toScalar()`メソッド、もしくは`__toString()`メソッドの返り値が引数になります。 ```php interface MemoAddInterface { + #[DbQuery('memo_add')] public function __invoke(string $memo, UserId $userId = null): void; } ``` @@ -273,7 +276,7 @@ class UserId implements ToScalarInterface ``` ```sql -INSERT INTO memo (user_id, memo) VALUES (:user_id, :memo); +INSERT INTO memo (user_id, memo) VALUES (:userId, :memo); ``` ### パラメーターインジェクション @@ -293,14 +296,14 @@ use Ray\MediaQuery\PagesInterface; interface TodoList { - #[DbQuery, Pager(perPage: 10, template: '/{?page}')] + #[DbQuery('todo_list'), Pager(perPage: 10, template: '/{?page}')] public function __invoke(): Pages; } ``` ページ毎のアイテム数をperPageで指定しますが、動的な値の場合は以下のようにページ数を表す引数の名前を文字列を指定します。 ```php - #[DbQuery, Pager(perPage: 'pageNum', template: '/{?page}')] + #[DbQuery('todo_list'), Pager(perPage: 'pageNum', template: '/{?page}')] public function __invoke($pageNum): Pages; ``` @@ -324,7 +327,7 @@ $page = $pages[2]; // 配列アクセスをした時にそのページのDBク エンティティクラスにハイドレーションを行うときは`@return`で指定します。 ```php - #[DbQuery, Pager(perPage: 'pageNum', template: '/{?page}')] + #[DbQuery('todo_list'), Pager(perPage: 'pageNum', template: '/{?page}')] /** @return array */ public function __invoke($pageNum): Pages; ``` diff --git a/README.md b/README.md index 8eaba3a5..e53532e7 100644 --- a/README.md +++ b/README.md @@ -237,6 +237,7 @@ For example, you can specify a `DateTimeInterface` object like this. ```php interface TaskAddInterface { + #[DbQuery('task_add')] public function __invoke(string $title, DateTimeInterface $cratedAt = null): void; } ``` @@ -260,11 +261,12 @@ $this->bind(DateTimeInterface::class)->to(UnixEpochTime::class); ## VO -If a value object other than `DateTime` is passed, the return value of the `ToScalar()` method that implements the `toScalar` interface or the `__toString()` method will be the argument. +If a value object other than `DateTime` is passed, the return value of the `toScalar()` method that implements the `ToScalar` interface or the `__toString()` method will be the argument. ```php interface MemoAddInterface { + #[DbQuery('memo_add')] public function __invoke(string $memo, UserId $userId = null): void; } ``` @@ -284,7 +286,7 @@ class UserId implements ToScalarInterface ``` ```sql -INSERT INTO memo (user_id, memo) VALUES (:user_id, :memo); +INSERT INTO memo (user_id, memo) VALUES (:userId, :memo); ``` ### Parameter Injection @@ -304,7 +306,7 @@ use Ray\MediaQuery\PagesInterface; interface TodoList { - #[DbQuery, Pager(perPage: 10, template: '/{?page}')] + #[DbQuery('todo_list'), Pager(perPage: 10, template: '/{?page}')] public function __invoke(): PagesInterface; } ``` @@ -315,7 +317,7 @@ You can get the number of pages with `count()`, and you can get the page object The number of items per page is specified by `perPage`, but for dynamic values, specify a string with the name of the argument representing the number of pages as follows ```php - #[DbQuery, Pager(perPage: 'pageNum', template: '/{?page}')] + #[DbQuery('todo_list'), Pager(perPage: 'pageNum', template: '/{?page}')] public function __invoke($pageNum): Pages; ``` @@ -336,20 +338,29 @@ $page = $pages[2]; // A page query is executed when an array access is made. Use `@return` to specify hydration to the entity class. ```php - #[DbQuery, Pager(perPage: 'pageNum', template: '/{?page}')] + #[DbQuery('todo_list'), Pager(perPage: 'pageNum', template: '/{?page}')] /** @return array */ public function __invoke($pageNum): Pages; ``` # SqlQuery -If you pass a `DateTimeIntetface` object, it will be converted to a date formatted string and queried. +`SqlQuery` executes SQL by specifying the ID of the SQL file. +It is used when detailed implementations with an implementation class. ```php -$sqlQuery->exec('memo_add', ['memo' => 'run', 'created_at' => new DateTime()]); -``` +class TodoItem implements TodoItemInterface +{ + public function __construct( + private SqlQueryInterface $sqlQuery + ){} -When an object is passed, it is converted to a value of `toScalar()` or `__toString()` as in Parameter Injection. + public function __invoke(string $id) : array + { + return $this->sqlQuery->getRow('todo_item', ['id' => $id]); + } +} +``` ## Get* Method