フォトアルバム

2009年7月

      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

なかのひと

アンケート

  • Do you Like?
    アンケート
    どのColdfusion用フレームワークが好き?
    ModelGlue:Unity
    ModelGLue
    Mach-II
    FuseBox
    LiteWire
    OnTap
    ColdBox
    OnAir
    cfWheels
    CFRails

    [PR]アンログ.jp 自動車保険

373news.com

想ひ出

  • Dvc00050
    携帯で撮った写真をアルバムにしています。

サムネイル

  • CF-OOP









  • ganymean.org









  • シナプス

Google Analytics

« 2006年3月 | メイン | 2006年5月 »

OpenPNE2

最近、巷でSNSが盛り上がっている。

mixi、GREE、LivedoorSNS、YahooSNS、地域SNS、専門SNS・・・

そのようなSNSブームで利用されているのが、オープンソースのSNSです。

OpenPNE、open-gorotto、Afferio、オープンソースではないけど、CreativeCommons(CC)ベースのINPALSもあります。

早速、今日OpenPNEをインストールしてみました。
OpenPNEを、CF-SNSにポーティングしてみようかなー。

ModelGlue+ColdSpring+Reactor+AjaxCFC+GoogleMaps+GoogleCalender

MG/CS/Reactor連携アプリケーション例

Brian Kotekが、ModelGlue-ColdSpring-Reactor連携のブックストアアプリケーションを
彼のブログにアップしています。
早速、私のサイトにインストールしてみました。
(彼は、Windowsマシンで開発しているらしく、View関連のフォルダ名とファイル名は一部変更が必要です)

1.ColdSpringによるModelGlue用BeanFactoryLoaderとAutowiring用コントローラー
2.ColdSpringによるReactorオブジェクトのファクトリー機能
を活用して、Model内がビジネスロジック層、サービス層、パーシスタント層にきれいに構造化されています。

次回は、その概要を紹介してみます。

また、Mach-II-ColdSpring-Reactor連携モデルも彼のブログにアップされています。

FuseBox5 Alpha1

Sean Corfieldのブログで、FuseBox5 Alpha 1リリースの記事が紹介されています。
V4.1と完全互換のようです。そして、今日現在は、Alpha2になっています。
詳細は、Fusebox 5 mailing listを見て頂戴!ってことのようです。
その後、ColdSpringとの連携記事Fuseboxのカスタムタグ機能(Lexicons)を使って、ModelGlueのコアを活用する記事も紹介されています。

ModelGlue V1.1リリース!

Joe Rinehartが彼のブログで、ModelGlue V1.1をリリースしたことをアナウンスしました。
V1.1の新規フューチャーは、ColdSpringのAutowiring用コントローラの実装です(By Sean Corfield)。

V2.0 Alpha(コード名:Unity)もSVNで公開されました。
同時に、彼のブログで、2.0アプリケーション例も別の記事で紹介されています。

Reactorをはじめる-18

さて、前回の記事 で、リソース情報を表示するのに、あるテクニックが使われていました。
即ち、GatewayオブジェクトでCreateQuery()メソッドを実行し、テーブル間のリレーションシップ(join)やソート条件(getOrder)およびフィルタ条件(GetWhere)と、2つのテーブルの全フィールドを対象フィールドに指定(returnObjectFields)していました。

Recordオブジェクトと組み合わせて使用するgetXyzIterator()との相違点を明確にしていくために、以前作成したuserGatewayオブジェクトにQueryオブジェクトを作成してダンプしてみます。
以下のCFMLスクリプトを実行してみましょう。

続きを読む "Reactorをはじめる-18" »

Reactorをはじめる-17

さて、次はcfOpenSourceListの表示部分です。

1.最初に、オープンソースリストを表示するので、リソースはGatewayオブジェクトとして定義します。

<cfset resourceGateway = application.reactor.createGateway("OpenSourceResource") />


2.次に、リソースとカテゴリーの結合クエリーをリソースGatewayに定義していきます。

<!--- build a joined query of resources and resource categories --->
<cfset objQry = resourceGateway.createQuery() />
<cfset objQry.join('OpenSourceResource','OpenSourceResourceCategories') />
<cfset objQry.join('OpenSourceResourceCategories','OpenSourceCategory') />
<cfset objQry.returnObjectFields("OpenSourceResource") />
<cfset objQry.returnObjectFields("OpenSourceCategory") />
<cfset objQry.getOrder().setAsc('OpenSourceResource','title')>
<cfset objQry.getOrder().setAsc('OpenSourceResource','resourceID')>
<cfif structKeyExists(url,"categoryID")>
   <cfset objQry.getWhere().isEqual('OpenSourceCategory','categoryID',url.categoryID) />
</cfif>
<cfset qryResources = resourceGateway.getByQuery(objQry) />


あらかじめ、カテゴリが指定されていれば、それをgetWhere()で指定しています。

3.あとは、qryResourcesを出力するだけです。

<cfoutput query="qryResources" group="resourceID">
<div id="resource">
   <p><span class="title"><a href="#qryResources.href#">#qryResources.title#</a></span> | <span class="edit"><a href="edit.cfm?resourceID=#qryResources.resourceID#">edit</a></span><br />
   <span class="description">#qryResources.description#</span><br />
   <cfif len(qryResources.license)>
      <span class="license">License: #qryResources.license#</span><br />
   </cfif>
   <span class="categories">Categories:
   <cfoutput group="categoryID">
      <a href="#CGI.SCRIPT_NAME#?categoryID=#qryResources.categoryID#">#qryResources.category#</a>
   </cfoutput>
   </span>
   <p>
</div>
</cfoutput>

Reactorをはじめる-16

さて、Reactorと他のCF-MVCフレームワークの連携に入る前に、もう少しスクラッチベースでreactorの利用方法を復習してみます。Reactorをはじめる-3で取り上げたBrian RinaldiによるReactorアプリケーション紹介記事を見てみましょう。

テーブルは、以下の3つのとおりです。

・OpenSourceResource
 オープンソースソフトウェアのリソース情報
・OpenSourceCategory
 オープンソースソフトウェアのカテゴリ情報
・OpenSourceResourceCategories
 OpenSourceResourceとOpenSourceCategoryをつなぐリンクテーブル

紹介記事の流れは以下のとおりです。

続きを読む "Reactorをはじめる-16" »

Reactorをはじめる-15

■Iterator

Iteratorは、hasManyリレーションを作成すると、自動的に作成されるということなので、Reactorドキュメントの例にあるCustomer、Address、Invoice、productオブジェクト間のリレーションを以下のように定義して、AddressRecordをダンプしてみます。

続きを読む "Reactorをはじめる-15" »

Reactorをはじめる-14

■RecordオブジェクトとDAOオブジェクト&TOオブジェクトの関係について

本日、Reactorのソースコードを見ていたら、abstractRecord.cfcのconfigure()メソッドに、以下のような記述がありました。
RecordオブジェクトをCreateすると、DAOとTOも自動的に生成するようです。

<cfset _setTo(_getReactorFactory().createTo(arguments.alias)) />
<cfset _setDao(_getReactorFactory().createDao(arguments.alias)) />

■Iteratorについて
 
Doug Houghesの2/28付の記事に、Reactorの最新リリースがアナウンスされていたのを見つけました。それによると、Iteratorは、

hasManyリレーションシップを作成すると、Recordオブジェクト:XyzRecordに2つのメソッド、getXyzQuery()とgetXyzArray()を作成していました。

It used to be that when you created a hasMany relationship that reactor would create two methods on your Record objects, getXyzQuery() and getXyzArray() where Xyz is the name of the related objects.

今回、これらをIteratorオブジェクトで置き換えました。hasManyリレーションを作成すると、getXyzIterator()メソッドが作成されます。これによって、XyzオブジェクトのIteratorを返します。
このIteratorはパワフルで、データのフィルタやソートを行いつつ、クエリー結果を得たり、ページ数を付けたり、配列結果を得たりできます。

This was replaced with an Iterator object.  Now, when you use hasMany one method named getXyzIterator() is created.  This returns an Iterator for your Xyz object.  The Iterator is more powerful because it allows for filtering and sorting data, getting a query of the results, paginating the data and getting arrays of results.

ということになるのだそうです。

Iteratorオブジェクトをどこで生成しているのか、よくわかりません。もう少し、追っかけてみます。

Reactorをはじめる-13

Reactorの基本オブジェクト

  • Gateway
  • DAO
  • Record
  • To
  • Iterator

について、そのダンプ内容を紹介してきましたが、おわかりいただけましたか?うん?なんだかしっくり来ない?そのとおりです!DougがReactorドキュメントで言及しているように、ORMの世界も経験するしかないんです・・・
DougのReactorSamples/Blogが最も参考になるアプリケーションですので、これを随時紹介していくことにしましょう・・・

また、次回まで。

Reactorをはじめる-12

Reactorの基本オブジェクトの各種メソッドをダンプ結果から確認しています。今回は、Iteratorオブジェクトに着目します。

Iteratorは、要素の集まりを保有するオブジェクトの各要素に順番にアクセスする方法を提供するオブジェクトでIteratorデザインパターンとしてよく知られています。

■userIterator

init ------------------ Objectを初期化し、Iteratorオブジェクトを返します。
getQuery ------------- 指定するレコードから指定カウント分のクエリーセットを返します。
getArray ------------- 指定するレコードから指定カウント分のアレイセットを返します。
setDistinct ----------- 単一レコードモードにします。
setJoinList ----------- JOINリストを指定します。
getJoinList ----------- JOINリストを返します。
getDictionary --------- Dictionaryオブジェクトを返します。
setGateway ----------- gatewayオブジェクトをセットします。
getGateway ----------- gatewayオブジェクトを返します。
getRecordCount ------- レコード総数を返します。
getName ------------- Iterator名を返します。
getWhere ------------- whereストリングを返します。
hasMore -------------- 次のレコードがあるかどうか返します。
getNext -------------- ネクストレコードを返します。
getValueList ---------- カレントレコードの指定フィールドリストの値を返します。
reset ---------------- Iteratorをリセットします。
getOrder ------------- orderストリングを返します。
resetOrder ----------- orderストリングをリセットします。

続きを読む "Reactorをはじめる-12" »

Reactorをはじめる-11

Reactorの基本オブジェクトの各種メソッドをダンプ結果から確認しています。今回は、Toオブジェクトに着目します。

ToはTrasfer Objectのことで、variablesスコープの代わりに、thisスコープでインスタンスデータを保持するオブジェクトです。

■userTo

configure ------------ Objectを初期化し、オブジェクトを返します。
userID --------------- userID
userName ------------ userName
passWord ------------- passWord
firstName ------------- firstName
lastName ------------- lastName
dateCreated ----------  dateCreated
merge ---------------  他のTo値を注入します。
_getSignature -------- 依存するDBの署名を返します。.
_getInstanceID ------- ObjectのインスタンスをUUID形式で返します。

続きを読む "Reactorをはじめる-11" »

Reactorをはじめる-10

Reactorの基本オブジェクトの各種メソッドをダンプ結果から確認しています。今回は、Recordオブジェクトに着目します。

■userRecord

configure ------------ Objectを初期化し、abstractRecordオブジェクトを返します。
init ----------------- userRecordオブジェクトを返します。
getUserID ------------ userIDをゲットします。(string)
setUserID ------------ userIDをセットします。(void)
getUserName --------- userNameをゲットします。(string)
setUserName --------- userNameをセットします。(void)
getPassWord --------- PassWordをゲットします。(string)
setPassWord --------- PassWordをセットします。(void)
getFirstName --------- firstNameをゲットします。(string)
setFirstName --------- firstNameをセットします。(void)
getLastName --------- lastNameをゲットします。(string)
setLastName --------- lastNameをセットします。(void)
getDateCreated ------- dateCreatedをゲットします。(string)
setDateCreated ------- dateCreatedをセットします。(void)
load ---------------- Recordオブジェクトをロードします。
save ---------------- Recordオブジェクトを保存します。
delete -------------- Recordオブジェクトを削除します。
createErrorCollection --- 検証用エラーコレクションオブジェクトを作成します。
validate ------------ Recordオブジェクトを検証します。
validated ------------ Recordオブジェクトが検証済かどうか返します。
hasError ------------ Recordオブジェクトに検証エラーがあるかどうか返します。
_getValidateErrorCollection --- Recordオブジェクトの検証エラー内容を返します。
newEvent ------------ 新規イベントをセットします。
announceEvent ------- イベントをアナウンスします。
attachDelegate ------- リスンするイベントと対応するオブジェクトとそのメソッドを追加します。

リスンイベント:beforeValidate, afterValidate, beforeSave, afterSave, beforeLoad, afterLoad, beforeDelete, afterDelete

detachDelegate ------- 特定のリスンイベントを解除します。
detatchAllDelegate ---- リスンするイベントをすべて解除します。
_getTO -------------- userToオブジェクトをゲットします。
_setTO -------------- userToオブジェクトをセットします。
_getDICTIONARY ------ userDICTIONARYオブジェクトをゲットします。
_setDICTIONARY ------ userDICTIONARYオブジェクトをセットします。
_getSignature -------- 依存するDBの署名を返します。
_getInstanceID ------- ObjectのインスタンスをUUID形式で返します。

続きを読む "Reactorをはじめる-10" »

Reactorをはじめる-9

Reactorの基本オブジェクトの各種メソッドをダンプ結果から確認しています。今回は、Daoオブジェクトに着目します。

■userDAO

configure ------------ Objectを初期化し、オブジェクトを返します。
create -------------- 指定するToオブジェクトを新規生成します。(void)
save ---------------- 指定するToオブジェクトに指定するレコードを読み込みます。(void)
update -------------- 指定するToオブジェクトの指定するレコードを更新します。(void)
delete -------------- 指定するToオブジェクトに指定するレコードを削除します。(void)
_getSignature -------- 依存するDBの署名を返します。
_getInstanceID ------- ObjectのインスタンスをUUID形式で返します。

続きを読む "Reactorをはじめる-9" »

Reactorをはじめる-8

Reactorの基本オブジェクトの各種メソッドをダンプ結果から確認しています。最初に、Gatewayオブジェクトに着目します。

■userGateway

configure ----------- Objectを初期化し、オブジェクトを返します。
getAll -------------- 全てのレコードセットを返します。
createQuery -------- クエリーオブジェクトを作成します。
getByFields --------- 指定されたフィールドの全てのレコードセットを返します。
getByQuery --------- クエリーオブジェクトの条件に合致するレコードセットを返します。
_getSignature -------- 依存するDBの署名を返します。
_getInstanceID ------- ObjectのインスタンスをUUID形式で返します。

続きを読む "Reactorをはじめる-8" »

ログイン

  • コントロールパネルへのログイン
    アカウント:

    パスワード:

PR情報

  • [[PR]]
  • おすすめバナー

更新ブログ

google Search

  • Google
    blog.ganymean.org
    WWW

最近のトラックバック

Google

SHINOBI

Blog powered by TypePad
Member since 04/2005