You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert
以前DDDの入門記事を書いたのですが、ここではリポジトリパターンについて深掘って取り上げます。続編ぽいタイトルですが、そんなにつながりはないのでコレ単体で読めます。 はじめに リポジトリパターンは、DDDで有名になった、ドメインモデルの永続化のためのデザインパターンです。 今やいろいろなところで「Repository」という名前を冠するクラスを目にするようになりましたが、誤解されたり誤用されることも多くあります。 ここではリポジトリパターンの意図や本質を理解することを目指します。リポジトリパターンには役立つ考え方が詰まっているので、このパターンを採用しなくても知っておくときっと役に立つと思います。 なお実装例はKotlinで書きますが、オブジェクト指向の言語であればだいたい同じ感じです。 リポジトリ(Repository)とは? 日本語訳は「保管庫」です。オブジェクトを保管しておき、必要な
Repositoryパターンについて再学習した際の備忘録です。 Repositoryパターン ドメインオブジェクトの集まり (以降、集約)を抽象化する設計手法。 DAO(DataAccessObject)とよく似ているが、DAOはデータアクセスの処理を抽象化する手法であり、Repositoryとは意識する点が真逆になっている。 また、DAOはクラスの分割方法については定義されていない点がRepositoryとは違う所となる。 データアクセスの抽象化という観点から、ORMもDAOの一種とも言える。 その特徴からRepositoryの内部でDAOを使用してデータを取得する事はあるが、逆にDAOの内部でRepositoryを使用してデータを取得する事は基本的には無い。 interface PostRepository { findById(postId: PostId): Promise<Pos
環境 Python: 3.11.2 Pydantic: 1.10.4 コンストラクタを使用する方法 super()を使用 __init__を定義し、super()で親クラス(BaseModel) の__init__を呼び出します。 例では、__init__内でtotal_priceにpriceとcountの積を代入する処理を行っています。 from pydantic import BaseModel class Price(BaseModel): price: int count: int total_price: int = 0 def __init__(self, price, count): super().__init__(price=price, count=count) self.total_price = price * count 実際にインスタンスを生成すると、意図した通
はじめに こんにちは!NFLabs. 研究開発部の林です。普段はセキュリティ教育プラットフォームの開発をしています。 今回はセキュアコーディングの重要な要素である「バリデーション(入力検証)」に関連して、PythonのPydanticライブラリにフォーカスしてお話します。 Python界隈では、昨今、型ヒントやFastAPIの普及に伴い、型の重要性や有用性が徐々に認識されつつあるかと思います。 それに伴い、バリデーションライブラリのデファクトスタンダードの一つであるPydanticの注目度も上がってきたと感じています。 Pydanticは実行速度の速さを特長として挙げていますが、Pydanticがもたらす安全性・Immutable(不変)性は、開発速度向上にも一役買っています。 本稿ではPydanticがいかに開発速度・開発体験に寄与するか考察します。 ちなみに、タイトルの「イミュータブル
時間がなくて議論を追っていなかったのですが、標準ライブラリ以外に依存したスクリプトを手軽に配布・実行するための提案である PEP 722 と PEP 723 がしばらく前から議論されていて、先月にPEP 723の方がAcceptされていました。 PEPのサンプルを引用しておきます。 /// script と /// で囲われている部分に、必要とするPythonのバージョンと、依存するライブラリを書いています。 # /// script # requires-python = ">=3.11" # dependencies = [ # "requests<3", # "rich", # ] # /// import requests from rich.pretty import pprint resp = requests.get("https://peps.python.org/api/
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く