オープンソースCMS「DotNetNuke」のセットアップ
前回はMicrosoft Web Platform Installerを利用して、DotNetNukeとWebMatrixをインストールする方法を紹介した。今回は、DotNetNukeのインストール方法を紹介する。
ブックマークされました!
ブックマークがエラーになりました。もう一度お願いします。
作者 Srini Penchikala , 翻訳者 金森 諭 投稿日 2008年2月29日
ドメインドリブンデザイン(DDD)(source)はビジネスドメインコンセプトをソフトウェアにマッピングすることだ。これまでDDD実装法の中心はオブジェクト指向プログラミング(OOP)(source)だった。OOPではオブジェクトがビジネスドメインの実体を表し、そのドメインオブジェクトをプレインなJavaクラスやインターフェイスでデザインすることで、継承・カプセル化・ポリモーフィズムといったOOPの考え方を利用できる。
通常、ドメインオブジェクトはServices(サイト・英語)、Repositories(サイト・英語)、ファクトリなどの他のオブジェクトと協調する必要がある。またドメイン状態について変化の監視・キャッシングやトランザクション管理(再試行を含む)といった横断的な処理も行う。これらは再利用可能な非ドメインロジックで、通常ドメインレイヤも含めたコード全体にばら撒かれコピーされる。このロジックをドメインコードに埋め込むと非ドメインコードが混ざりドメインレイヤが乱雑になってしまう。
OOP単体ではドメインドリブンなデザイン/開発における非依存性(オブジェクトと横断的関心事(複数のオブジェクトに跨ったり共通したりする特性)間の密結合がないようにする)についての優れたデザイン方法が提供できない。ここで依存性注入(DI)(source)やアスペクト指向プログラミング(AOP)(source)が関わってくる。OOPを補完するこれらの考え方によって密結合を最小限に抑え、モジュール性を高め、より良く横断的関心事を管理できるようになるのだ。
最近ドメインドリブンデザインのユーザーフォーラム(source)でのあるスレッド(source)で議論されたのがこのことだった。この議論はRamnivas Ladda氏のプレゼンテーション(source)が元になっている。彼はそこでDDDはAOPやDIの助けなしに十分な実装はできないと主張し、AOPを使った適度な粒度のDIによってドメインオブジェクトが洗練された振る舞いを取り戻すという考えを示した。ドメインオブジェクトは豊富な振る舞いを提供できるよう、他の適度な粒度のオブジェクトにアクセスする必要があり、それはサービスやファクトリやレポジトリをドメインオブジェクトに注入することで行える(アスペクト機構を利用してコンストラクタ(source)やセッターメソッド(source)の呼び出し時点で依存性を注入する)と説明した。
ドメインオブジェクト間の依存性(例えばエンティティとレポジトリ間の依存性)をうまく管理することは、DDD開発者がよく突き当たる古典的な問題だ。この問題に対しての通常の策は、サービスあるいはファサードクラスにレポジトリを直接呼び出させ、レポジトリでは呼ばれた時にエンティティオブジェクトをクライアントに返すというものだ。しかしこの方法はファットなサービスレイヤと貧血症ドメインモデル(source)を作ってしまう。ファサードクラスはどんどんビジネスロジックを持つようになり、ドメインオブジェクトはゲッター/セッターメソッドを持った単なるデータの運び役になる。
InfoQはドメインドリブンデザインの本(source)を執筆したEric Evans氏(source)と上記のRamnivas Laddad氏(source)に、DDDの実装におけるDIとAOPの役割について聞いた。DDDはAOPやDIなしで実装できないと言ったことについてReminivas Laddad氏に尋ねると、その前段階はドメインオブジェクトがもっと洗練され、レポジトリやサービスといった他のオブジェクトと協調しないといけないのかどうかという話だったと語った。
これはドメインオブジェクトが他のオブジェクトをどうやって取得するかという問題です。DIはそれにふさわしい方法に思えます。またこの時にAOPが関わってきます。Springがどのように生成されたオブジェクトでもDIできる(application context(source))内で宣言されたオブジェクトに限る)のと同じ方法ができるようにするのです。もちろんAOPはどんなドメインレベルの横断的関心事に対して有効です(ドメインコンセプトがソフトウェアに可能なかぎり厳密にマッピングされていることが前提となる)。
Eric Evans氏はOOP、DI、AOPという考え方をどのようにDDDの実装にフィットさせるかを語ってくれた。
DDDはモデルコンセプトの抽象化と表現ができるどんなパラダイムでも行えるのですが、実際にはほとんどがOOPで行われています。なので、OOPがDDD実践の基盤となってきました。
最近になってDIはとても広く行われるテクニックとなり、それを上手く行えばDDD実践者がデザインを改善する手助けになっています。私からみて一番重要なのは、DIがドメインの分離において役立つということです。
AOP のポテンシャルは認識され始めたばかりです。AOPにはドメインレイヤをまとめる力があるように思います。これはモデルコンセプトを明確に表現するのに役立ちますし、おそらく分離にも役立つでしょう。ただ、OOPやDIと違ってまだ実践された真の”基盤”とはなっていません。
この3つがDDDを支援する現段階でのベストプラクティスなアーキテクチャの基盤となります。
彼はDDDのフィロソフィとそれを実現するさせることを助ける技術的なツールボックス(OOP、DI、そしておそらくAOP)との線引きを明確にすることが重要だということも強調した。
横断的関心事やDIを定義したり管理する方法としてアノテーションを使うのが最近のトレンドだ。Springでは@Configurable(source)をレポジトリやサービスをドメインオブジェクトに注入するのに用いる。InfoQはEric Evans氏にDDDプロジェクトでのアノテーションの役割について尋ねた。
一般的には、アノテーションのようにドメインコンセプトを表すオブジェクトに付加されるものは、そのオブジェクトに対して概念的に意味のある何かを伝えます。@Configurableは処理について宣言するもので、ドメインについてではありません。そのためこのようなアノテーションがドメインオブジェクトに付くのは好みません。私の場合、レポジトリにインターフェイスおよび実装を作りますが、インターフェイスはドメインの分野のものと考え、実際に使えるレベルを維持しながらなるべくクリーンで概念的なレベルに留めるようにします。しかし実装はたいていいつも個々の技術を用いることになります(典型的な例としてはDAO)。@Configurableはレポジトリについての実装で使います。これは理にかなったことだと思います。
Spring フレームワークではこの”ドメインオブジェクトDI”の考えを@Configurableアノテーションより進んだ方法で持つようになる。 Reminivas Laddad氏はSpringの次期バージョン2.2.5での改善点(build 379のスナップショット(source))から利用可能になっている)について最近ブログ記事(source)を書いた。このバージョンではAnnotationBeanConfigurerAspect,、 AbstractInterfaceDrivenDependencyInjectionAspect、 AbstractDependencyInjectionAspectが加えられ、これによりドメインオブジェクトのDIをより柔軟かつシンプルに行えるようになっている。2つ目のアスペクト(AbstractInterfaceDrivenDependencyInjectionAspect)が取り入れられた主な理由として、彼はドメイン独自のアノテーションとインターフェイスが使えるようにするためだと述べている。彼はまた @Configurableはシンプルだが最も洗練された選択肢とはいえないだろうとも述べている。
ビジネスサービスのオーケストレーション(ある処理を行うために必要なサービス間の複合的相互作用を管理する)やドメインオブジェクトのライフサイクルについても議論がある。BPEL(Business Process Execution Language:ビジネスプロセスモデリング言語のひとつ)がどれくらいドメインオブジェクトのライフサイクルと異なるドメインオブジェクト間のやり取りについて影響を及ぼしたか、という問いについてEric Evans氏は以下のように答えた。:
オーケストレーションとライフサイクルの関係については用心しないといけません。オーケストレーションは、パーツを分離する方法としては優れているでしょうし、ワークフローを何らかの形で表現すれば協調させることができる点でも優れているでしょう。一方、ドメインエンティティのライフサイクルがモデルにおいて中枢的意味を持つ場合、その責任をオーケストレーションに任せれば結果としてドメインオブジェクトは骨抜きにされ貧血症ドメインモデルになるでしょう。このことについての模範解答はありません。これは良いモデラ/デザイナによってケースバイケースで評価することです。原文はこちらです:http://www.infoq.com/news/2008/02/ddd-di-aop
前回はMicrosoft Web Platform Installerを利用して、DotNetNukeとWebMatrixをインストールする方法を紹介した。今回は、DotNetNukeのインストール方法を紹介する。
DotNetNukeは、Windows Serverで動作するCMS(Contents Management System)である。この記事ではWeb Platform Installer を利用して人気CMS「DotNetNuke」と無償Web開発環境「WebMatrix」のインストールする方法を紹介する。
クラウドコンピューティングを前提とした大規模データ技術が利用可能となってきています。Big Dataが一過性のブームで終わるかどうかにかかわらず、スケーラブルな分散アーキテクチャーの基盤はデータベース技術に主導されつつあります。RDBとORM主体のエンタープライズシステムは、HadoopやNoSQLとの組み合わせにより複合的なデータモデルに発展しました。
2011年12月8日~2011年12月9日に、ロンドンのSkills Matter eXchangeにて開催された「Groovy & Grails eXchange 2011」の参加報告を、日本Grails/Groovyユーザーグループのメンバーが3回に渡って紹介します。
Googleのクラウド環境をつかったGoogle App Engineによる開発するにあたり、初めての試みで苦悩する開発者達の経験をもとに、各開発フェーズにあわせて問題点やどう解決したかをご紹介します
去る1月12日、定理証明支援系ツールCoqの初心者向けチュートリアルが開催さ れた(http://kokucheese.com/event/index/23667/)。今後も2月2日 (http://kokucheese.com/event/index/23744/)、2月9日、2月16日と引き続���開 催されていく予定である。本記事では、開催の様子をレポートする。
Neal Gafter氏はOracleによるJava買収の影響に関する議論、Javaにセグメンテッドスタックやメタオブジェクトプロトコルを追加することについての主張、そしてJavaとC#との比較について話をしてくれた。
No comments
スレッド表示 返信