オブジェクトを本格的なOOクラスに変換できる。このクラスは、CRUD操作を含んで、可能な全ての責務を満足させることができる。エンティティに対するジェネリックDAOと具体的なDAOからできているべきである。CRUDメソッドを実行できるフィーチャを持つべきである。ジェネリックなので、エンティティの具体的な実装ではなく、型を扱うべきである。実装は、Scalaのcollectionの概念をもっていないが。Scalaのcollectionは、Javaのcollectionよりかなり強力なので、DAOメソッドを呼ぶ方は、Scalaのcollectionを戻すようにするのが望ましい。JPAから戻るJavaのcollectionをScalaのcollectionに変換するうまい方法を見つける必要がある。パターンに基づいている。JmsSessionなどの下層の実装クラスに直接アクセスせざるを得ない。Callbackクラスを提供している。EntityManagerのような望みの実装クラスへの参照を持っている。クラスをインスタンス化するには、大量の決まりきったコードが必要なこと。finalである必要がある、という制約をがまんしなければならない。Scalaの視点からコールバックのパターンを見ると、我々が本当に見ているものは、「関数」の厄介な実装である。クラスの手間は省きたい。);問題は、いかにこのことがエレガントなやり方で成し遂げられるか、ということである。特定のbeanの名前に対応したsetterメソッドを提供する必要がある。これらのsetterは、フレームワークのための決まりきったコードである。Constructor注入を使わずに、これらのコードを避けることができたらすばらしいのだが。collectionに変換するクラスを提供しており、暗黙的な変換を基にしている。「ラッパー」に変換する。Scala.collection.jcl.BufferWrapperを生成する。collectionのインスタンスが戻ってくる。マニュアルで呼ばなければならないのは、ちょっと面倒だろう。executeメソッドを呼ぶことができる。);こうすると、決まりきったコードを書かなければならない元がなくなることになる。setterを生成しない。setterを生成するようにコンパイラに伝えるアノテーションを提供している。getPersonDao()を生成するように告げる。setterが必要な各インスタンス変数用の余分な3~6行のコードが節約される。オブジェクト)ここまでやったのは、「状態のみ」のエンティティの永続化ができるDAOパターンの経費節約型の実装である。エンティティ自身は、かしこいオブジェクトではない。その責任は、状態を保持するだけである。支持者にとっては、単純なエンティティは、複雑なドメインで直面する課題に立ち向かうには不十分である。ドメインオブジェクトと考えられるエンティティは、状態を保持するだけでなく、ビジネスサービスを呼ぶことができるべきである。これを実現するには、たとえコード上のどこでインスタンス化されても透過的にドメインオブジェクトにサービスを注入できる仕組みがあるべきである。Springと結びついたScalaによって、サービスを実行時にインスタンスかされたあらゆる種類のオブジェクトに透過的にサービスを注入するのは非常に簡単である。オブジェクトに昇格するようにできる。アプリケーションに新しい要件を加える。呼んで、リンク元とリンク先に通知すべきである。エンティティがインスタンス化された直後あるいは、データベースから呼び出された直後に入手可能であるべきである。factory-methodアトリビュートが使われて、SpringにautoWireFactory()メソッドによって返された参照、これはシングルトン自身である、を使うように強制する。シングルトンは、同じクラスローダのスコープで、どこからでもアクセスできるので、そのスコープのあらゆるクラスは、RichDomainObjectFactoryを使用でき、控えめな緩く結合した方法で、Springのautowireフィーチャにアクセスできるようにする。コードでインスタンス化される。RichDomainObjectFactory中でフックするのに使われる必要がある。(横取り)APIを提供しているので、特に、このAPIによって、エンティティのローディングを横取りして、カスタマイズできる。autowireメソッドにロードされているエンティティを渡すことである。Personエンティティに、注入されるのが保証される。プロパティによって、JPAの永続化コンテキストに登録される必要がある。Springに設定されたサービスといっしょにリッチなエンティティを用意できる。autowireすることであろう。クラスをしっかり繋いでしまうので、勧められるやり方ではない。factoryの責務を引き継ぐように指名される「companionオブジェクト」という構成要素を提供する。インスタンスへのハンドルを提供するautoWireFactory()メソッドをインポートする。メソッドを呼ぶことができる。autowireコードにとって理想的な場所となる。‘new’無しで、単にPerson()を呼ぶだけで、「リッチな」DDDジョブを実行できるように、必要な全サービスを注入した新しいエンティティが返されてくる。RichDomainObjectFactoryは、Scalaではなく、Javaで実装されているのかを説明する必要がある。staticの扱い方に関係している。staticキーワードが無い。staticは、オブジェクト指向/関数の混合パラダイムと衝突するからである。オブジェクトであり、Javaにおけるそれに対応するものは、シングルトンである。factoryオブジェクトへのハンドルを取得することは、Springにはできないのである。companionオブジェクトに注入することはできない。Springのautowire機能にアクセスできるようにJavaによる実装が使われるのである。オブジェクトここまでのところは、順調である。Scalaには、OO純粋主義者に、提供するものがもっとある。DAOを使って、エンティティを永続化するのは、ちょっと純粋のOO原則に反する。DAO/Repositoryパターンでは、DAOは、永続化操作を実行する責務を持っている。これは、純粋に振る舞い的であり、エンティティは、状態を保持することになっている。それどころ、純粋OOオブジェクトは、振る舞いと状態を一体化できるべきである。前節で示したように、サービスを持つエンティティを使って、エンティティに永続化の部分以外の振る舞い上の責務を持たせる。エンティティに全ての振る舞い上の責務と状態の責務を与えないのか?OO純粋主義者に支持されるように、この中には、永続化の操作を実行する責務を含むのである。実際のところ、これは好みの問題である。Javaで、簡潔に、エンティティが自身を永続化させるのは、かなり難しい。そのような設計は、継承にひどく依存しなければならない。その場合、永続化メソッドがスーパークラスに実装されるだろう。そのようなアプローチは、かなり不細工で、柔軟性に欠けている。Javaは、単に、そのようなロジックをうまい設計方法で実装するための概念的な基盤を欠いているのである。traitsは、実装を持つことができるinterfaceである。よって提供される全ての永続化メソッドは、自動的に全ての実装クラスで使用可能である。原則を完全に守っている。永続化のロジックは、一度だけ実装され、必要のたびにドメインクラスにミックスインされるからである。このtraitはSpringのJpaDaoSupportをextendする。getEntityを定義する。オブジェクトによって実装される。getEntityメソッドを使用する。getEntityの実装を提供しなければならない。traitを実装する必要があるだけ、それだけである。Odersky”).saveあなたが純粋のOO原則の支持者であろうがなかろうが、この例は、Scala特にtraitの概念によって、純粋のOO設計を実装するのが著しく簡単であることを示している。Springがお互いをちゃんと褒めあっていることを示している。Springの依存性注入、AOPそして最先端のJavaAPIの統合とが一体化して、Javaと比べてずっと表現力を持ち、少ないコード量で、多様かつ面白い可能性を提供している。Javaのバックグラウンドがあるとすれば、たくさんの新しいAPIを持った新しい言語を学ぶのではなく、新しい言語だけを学べばいいので、学習曲線は、中程度である。もたらす優れた可能性により、この組み合わせが、エンタプライズにおいてScalaを採用するための面白い候補になる。結局のところ、著しく強力なプログラミングパラダイムに乗り換えるのは、低コストだと言える。エンタプライズJavaとAgileソフトウェア開発を専門にしている。IT業界で9年の経験がある。Masterを経験している。Masterをやっている。XebiaのScalaエバンジェリストとオランダScalaユーザグループの活発なメンバである。mavenでビルドする。毎週火曜日に前週のまとめコンテンツがお送りいたします。25万人ものシニアデベロッパーのコミュニティーにぜひご参加ください。サンプルを見るあなたのメールアドレスはこちら国を選んでください。プライバシーポリシーに従って私の個人情報を扱うことに同意します。登録するとさまざまなことができます。アカウント登録をしてInfoQをお楽しみください。あなたの意見をお聞かせください。毎週火曜日に前週のまとめコンテンツがお送りいたします。25万人ものシニアデベロッパーのコミュニティーにぜひご参加ください。サンプルを見る様々なイノベーターとアーリーアダプターがお送りするテクノロジーの概要を見る。自分がまだ知らないことに気づいていないと知るあなたが興味のあるトピックスをいつでも最新な情報に。あなたのメールアドレスはこちら国を選んでください。プライバシーポリシーに従って私の個人情報を扱うことに同意します。よい世界へ私たちが暮らす世界を大切に思い、よりよいものにしたいと考えています。人のためのソフトウェア開発を加速し私たちのミッションを実現することで、この思いを成し遂げようとしています。私たちは利益の1%をさまざまな慈善団体に寄付しています。会社として、また従業員として、そうしたことの価値を強く信じているからです。with.プライバシーBTあなたのプロファイルは最新ですか?プロフィールを確認してアップデートしてください。アドレス*Eメールを変更すると確認のメールが配信されます。会社名:現在の会社名をご入力ください。Other組織規模:現在の組織規模をご入力ください。2,501+国:現在の国を設定してください。Zimbabwe都道府県:現在の都道府県に設定してください。次の都道府県にアップデートする:ニュースレターを購読しますか?インダストリーメールを購読しますか?本Eメールに登録すると、以前より関心のあったトピックの関連情報をお送りする場合がございます。詳細はこちらのプライバシーポリシーをご覧ください。newsletter?新しいメールアドレスに確認用のメールを送信します。このポップアップ画面は自動的に閉じられます。