(jp) =
Spatie の当時の同僚と一緒に、spatie/data-transfer-object の最初のバージョンを公開してから 4 年が経ちました。
当時、PHP 7.3 はちょうど角を曲がったところにあり、パッケージは、クラス プロパティの複雑なランタイム型チェックを追加する方法として開始されました。 これにより、プログラマーは型付けされた方法で正しいデータを実際に扱っているかどうかを確信できました。
class PostData extends DataTransferObject
public $property;
public $property;
public $property;
public $property;
public $property;
public $property;
public $property;
public $property;
public $property;
1 年早送りして PHP 7.4 にすると、型指定されたプロパティが追加されました。 最初から、パッケージの目標の 1 つは将来廃止されることだと言っていたので、その実現に一歩近づいたように思えました。
しかし、このパッケージの別の (偶然の) 機能が人気を博し始めました: 生データをネストされた DTO にキャストする機能です。 したがって、DTO は次のようになります。
class PostData extends DataTransferObject
public AuthorData $author;
次の入力から作成できます。
$postData = new PostData([
'author' => [
'name' => 'Foo',
],
]);
そのため、型付きプロパティが存在するようになりましたが、少し異なる形ではありますが、パッケージを継続することにしました。
次に、属性と名前付きプロパティを備えた PHP 8.0 が登場し、さらに多くの機能を追加できるようになりました。
class MyDTO extends DataTransferObject
public OtherDTO $otherDTO;
public OtherDTOCollection $collection;
public ComplexObject $complexObject;
public ComplexObjectWithCast $complexObjectWithCast;
public int $a;
public string $city;
ただし、この時点では、パッケージが最初に解決しようとしていた問題からはほど遠いものでした。 実行時の型チェックがなくなりました。これは、PHP の改良された型システムのおかげでもあります。また、最近の型関連の問題を解決するには、静的解析の方がはるかに優れていると私が信じているためでもあります。
さらに、このパッケージよりも優れた「データ マッピング」のソリューションがあります。リクエスト、データベース、ビューなどの間でデータをマッピングするための信じられないほどの Laravel 固有のアプローチを備えた spatie/laravel-data があります。 私たちのパッケージよりもはるかに多くの機能を提供する cuyz/valinor があります。 symfony/serializer もありますが、これはもう少し必要最小限ですが、より強力でもあります。
そして、2 年間私の心にあった質問が答えられました。 は 廃止する時期 spatie/data-transfer-object
.
もちろん、私はこの問題について Spatie の元同僚や、数年間パッケージの保守を手伝ってくれた Aidan と話し合った. 私たちは皆、これが良い時期であることに同意しました。
- PHP は大幅に進化しました。つまり、パッケージの当初の目的は達成されました。
- Laravel 固有のものとフレームワークにとらわれないものがあります。
- ゆっくりとした死(すでに起こっているようなもの)よりも、パッケージに価値のある結末を与える方が良い.
ここで、非推奨になったからといって、パッケージがなくなったわけではないことに注意してください。 コードは引き続き使用できます。近い将来に問題が発生することはないと思います。
深刻な懸念がある場合は、遠慮なくお知らせください。 Twitter上で!