理系学生日記

おまえはいつまで学生気分なのか

PoEAA の検索結果:

REST API における同時並行制御

以前「API で同時に更新要求があったとき、どうするのが定石なんだろう」というのを調べたのですが、きちんとまとめていませんでした。 それからちょっと時間がかかってしまいましたが、簡単にここでまとめてみます。 取り組む問題 勧告 概要 実現 Etag Precondition 補足 参考 取り組む問題 更新系の操作を行うとき問題になるのは、1 リソースに対して同時並行的な更新が行われようとした場合です。 たとえばですが、 A が口座の貯金額を参照し、$100 あることを確認する…

PoEAA: Coarse-Grained Lock

今日は Coarse-Grained Lock、関連した複数のオブジェクトのロックを取得する際のパターンです。 P of EAA: Coarse-Grained Lock via kwout 上の図における顧客 (Customer) と住所 (Address) の関係に代表されるように、互いに関連するオブジェクトを一緒にロックしたいというケースがあります。 それぞれのオブジェクトを馬鹿正直にロックする方針を採ると、デッドロックを生じさせないように「個々のオブジェクト」を「正し…

PoEAA: Pessimistic Offline Lock

今日の Pessimistic Offline Lock は、任意のタイミングにおいて、データにアクセスするビジネストランザクションを 1 つに限定することで、データの不整合を防止するパターンです。 Patterns of Enterprise Application Architecture (Addison-Wesley Signature Series (Fowler))作者:Fowler, MartinAddison-Wesley ProfessionalAmazon…

PoEAA: Optimistic Offline Lock

今日からは Offline Concurrency Patterns ということで、排他制御の話に入ってきます。今日は、Optimistic Offline Lock ということで、楽観的排他制御です。 Patterns of Enterprise Application Architecture (Addison-Wesley Signature Series (Fowler))作者:Fowler, MartinAddison-Wesley ProfessionalAmaz…

PoEAA: Data Transfer Object

今日は Data Transfer Object、いわゆる DTO と呼ばれるパターンです。 DTO の目的は、リモート呼出の効率化です。リモート呼出の際に必要な情報を DTO というオブジェクトの中にこれでもか、これでもかと詰めてやることで、リモート呼出の回数を削減することができます。 DTO はその役割上、シリアライズされる必要があるので、ドメインオブジェクトではなく、単に値を持ちロジックを持たないオブジェクトとすることがほとんどになります。 P of EAA: Data…

PoEAA: Application Controller

Patterns of Enterprise Application Architecture (Addison-Wesley Signature Series (Fowler)) (English Edition)作者:Martin, FowlerAddison-Wesley ProfessionalAmazon Application Controller には 2 つの役割があります。 どのドメインロジックを実行するのかを決める どの View を使ってレスポンスを作成…

PoEAA: Two Step View

最終的に HTML を出力する場合であっても、一度論理的な View に変換した後で、それを実際の View に変換するという 2 ステップを踏むパターンを、文字通り Two Step View と呼びます。 JVM の中間コードだったり、LLVM の IR みたいなもの。主なメリットは、個々のページで共通的な箇所を論理的な View で抽象化でき、全体のページのレイアウト等を変える等しやすい点。 Patterns of Enterprise Application Arch…

PoEAA: Transform View

今日の Transform View は、View として、ドメイン層のデータをインプットにして、HTML を出力するトランスレータを採用するパターンです。 Patterns of Enterprise Application Architecture (Addison-Wesley Signature Series (Fowler)) (English Edition)作者:Martin, FowlerAddison-Wesley ProfessionalAmazon この…

PoEAA: Template View

Template View パターンは、静的 HTML と同じ形で HTML を記述した上で、動的に変更するようなところにのみマーカーを埋め込むパターンです。 静的なところは WYSIWYG のエディタで記述でき、動的な部分は実際にレンダリングする際に、マーカーがプログラムの実装と連携する形でコンテンツを描画します。 Patterns of Enterprise Application Architecture (Addison-Wesley Signature Series…

PoEAA: Front Controller

今日は Front Controller。 Front Controller は セキュリティや国際化など、リクエストに対する共通処理を一元的に行い、その後、リクエストをコマンドオブジェクトに引き渡すというパターンです。 P of EAA: Front Controller via kwout Patterns of Enterprise Application Architecture (Addison-Wesley Signature Series (Fowler))作者…

PoEAA: Page Controller

Page Controller は、特定ページ/Action に対するリクエストを処理するオブジェクトです。 P of EAA: Page Controller via kwout 本書では、これを実現する方法として、 Server Page (ASP/PHP/JSP 等) に混ぜる Script (CGI/Servlet) で記述する という方法を謳っていますが、このうちで Server Page に混ぜる方法については、構造が汚くなるぞという念押しがされています。まぁ実践…

PoEAA: Model View Controller

今日からは、Web Presentation Pattern の章にはいります。 最初が Model View Controller なんですが、おそらく開発者の誰もが聞いたことがあるパターンです。 Patterns of Enterprise Application Architecture (Addison-Wesley Signature Series (Fowler)) (English Edition)作者:Martin, FowlerAddison-Wesley …

PoEAA: Repository

パターン名からは DI 用のパターンかな??と思っておりましたが、Repository はドメイン層とデータマッピング層の中間に存在する抽象化レイヤです。 P of EAA: Repository via kwout Repository は、言ってみればクエリ生成を一手に引き受け、そのクエリによって抽出されたドメインをクライアントに返却するオブジェクトです。Repository を使用するクライアントは、その背景にあるデータアクセスや、データからドメインへのマッピングを完全…

PoEAA: Query Object

…雑なパターンなので、PoEAA では以下のように言っています。 Query Objects are a pretty sophisticated pattern to put together, so most projects don't use them if they have a handbuilt data source layer. My inclination is that you’re almost always better off buying a to…

PoEAA: Metadata Mapping

Metadata Mapping は、オブジェクトとテーブルデータをマッピングさせるデザインパターンです。 データベース上のテーブルをメモリ上のオブジェクトに変換するコード、また、その逆変換のコードは、テーブル毎に似ていて非なるものなので、同じようなコードが大量生産されがちです。このパターンは、それを解決するためのものになります。 Patterns of Enterprise Application Architecture (Addison-Wesley Signature…

PoEAA: Inheritance Mapping

オブジェクトの継承ツリーとテーブルとのマッピングに関する章も終盤、今日はそのマッピング自体の設計パターンである、Inheritance Mapping がテーマです。 P of EAA: Inheritance Mappers via kwout しかしながら、この図がすべて。あんまり追記することなかった。

PoEAA: Class Table Inheritance

Class Table Inheritance は、Rool-Leaf Mapping とも呼ばれるもので、階層構造を持つオブジェクトモデルと DB 上のエンティティとの関係について、オブジェクトモデルのクラス毎にテーブルを持たせるというデザインパターンです。 P of EAA: Class Table Inheritance via kwout オブジェクトモデルとエンティティという対応においては分かりやすいパターンです。 ドメインモデル上で表現されるデータがテーブル上で散…

PoEAA: Single Table Inheritance

Patterns of Enterprise Application Architecture (Addison-Wesley Signature Series (Fowler)) (English Edition)作者:Martin, FowlerAddison-Wesley ProfessionalAmazon Single Table Inheritance は、オブジェクトモデルにおいて表現された継承関係を DB にマッピングするためのデザインパターンの 1 つで、 …

PoEAA: Serialized LOB

今日は Serialized LOB。 Patterns of Enterprise Application Architecture (Addison-Wesley Signature Series (Fowler)) (English Edition)作者:Martin, FowlerAddison-Wesley ProfessionalAmazon あんまり珍しくないパターンが多かったけど、このパターンには思い出があって、どうやったって仕様が固まらないけど開発だけは進め…

PoEAA: Embedded Value

今日は Embedded Value。 オブジェクト指向におけるオブジェクトを全部 RDB 上のテーブルとしていたらダルすぎるので、日時情報とか通貨とか、テーブルのフィールドとして考えたら良いよね、という至極もっともな話。日時とか通貨とかは、テーブルに保存するタイミングと同時に保存されるので、Dependent Mapping パターンの特別版ともいえる。 Patterns of Enterprise Application Architecture (Addison-Wes…

PoEAA: Dependent Mapping

(CD とかの)「トラック」のデータが「アルバム」という親の概念のエンティティのロード/保存に合わせてロード/保存され、一方でそれ以外のエンティティからは参照されないようなケースがあります。 このように、他のエンティティからは独立した親子関係が成立しているとき、親である「アルバム」のレコードを Object に変換する Mapper が、子である「トラック」のレコードも Object に変換すると、DB -> Object のマッピングはシンプルになります。 このようなパター…

PoEAA: Association Table Mapping

1 対多の関係については、昨日の Foreign Key Mapping で解決できるのですが、それで解決できないのが多対多の関係です。 これを解決するパターンとして昔から用いられてきたのが、関連を持つテーブルをデータベースに追加し、本日のテーマである Associtation Table Mapping パターンを使うことになります。 Patterns of Enterprise Application Architecture (Addison-Wesley Signat…

PoEAA: Foreign Key Mapping

本日は、Foreign Key Mapping です。 Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions (Addison-Wesley Signature Series (Fowler))作者:Hohpe, Gregor Woolf, BobbyAddison-Wesley ProfessionalAmazon 何かしら特別なことはなくて、オブジェク…

PoEAA: Identity Field

Chapter 12. Object-Relational Structural Pattern に突入しました。 Patterns of Enterprise Application Architecture (Addison-Wesley Signature Series (Fowler)) (English Edition)作者:Martin, FowlerAddison-Wesley ProfessionalAmazon 初回は Identity Field で、これ…

PoEAA: Lazy Load

ひさしぶりの PoEAA、今日は Lazy Load がテーマです。 Patterns of Enterprise Application Architecture (Addison-Wesley Signature Series (Fowler))作者:Fowler, MartinAddison-Wesley ProfessionalAmazon Lazy Load、その和訳には "遅延ロード" っていうのが挙げられることが多いんですが、必要な全部のデータを最初から取得する…

PoEAA: Identity Map

今日も引き続き Chapter 11. の Object-Relational Behavioral Pattern で、Identify Map です。 Patterns of Enterprise Application Architecture (Addison-Wesley Signature Series (Fowler)) (English Edition)作者:Martin, FowlerAddison-Wesley ProfessionalAmazon Ide…

PoEAA: Unit of Work

…しく実装するのはとてもダルいだろうなぁという印象を持っていましたが、PoEAA 上のサンプルが非常に簡潔だったことにわりと衝撃を受けました。 ※もちろん、ここでは参照整合性を確保やデッドロック云々は実装上入っていないのですが。 このパターンの実装、とても綺麗だと思うのですが、この実装を使う側への説明とその徹底(登録や更新をするときは必ず Unit of Work を使用する)が難しいのと、それを自動化しようとすると可読性が下がるのとで、なかなか適用はハードルが高そうです。。。

PoEAA: Data Mapper

Data Mapper で、とりあえずは Chapter 10. の Data Source Architectural Patterns はおわり。 Patterns of Enterprise Application Architecture (Addison-Wesley Signature Series (Fowler)) (English Edition)作者:Martin, FowlerAddison-Wesley ProfessionalAmazon オブジェク…

PoEAA: Active Record

今日の PoEAA は、Active Record。 Patterns of Enterprise Application Architecture (Addison-Wesley Signature Series (Fowler)) (English Edition)作者:Martin, FowlerAddison-Wesley ProfessionalAmazon 全体感としては、Chapter 10. Data Source Architectual Patterns …

PoEAA: Row Data Gateway

Row Data Gateway は、DB 上の 1 レコードに対する Gateway として働くオブジェクトです。 1 レコードに対する DB アクセスをカプセル化して、他のレイヤに対して DB アクセスを隠蔽します。 先日の Table Data Gateway がテーブルに対する Gateway だったのとは粒度が異なる形です。 Table Data Gateway もそうですが、DB アクセスが他のレイヤから隠蔽されるため、この Gateway を差し替えることで他の…