システム間キャッシュへのバックストリートアクセス '





システム間キャシシュへのバックストリートアクセス







「いくつかの作品は、おそらく、より深い思考の深さで異なります

そして人間性のより良い知識; 多分他の本

独創性と量の点で私に劣らない、

しかし、絶望的で不治の信頼性を備えているため、

これまでに発見されたすべての作品。」



J.K.ジェローム。 「同じボートで3匹、犬を数えていない」




玄関に停滞したり、喫煙マニュアルを読んだり、パンフレットを読んだり、ITからの次のセキセイインコの情熱的な保証に耳を傾けたりしないように、裏庭からCacheの世界に足を踏み入れて、このような違法な没入をお勧めします。 このテクノロジーを10年以上(1秒も)使用してきた人として、そしてそれについての知識がほとんどないので、この簡単な旅でガイドの役割をマスターできることを願っています。



ディスカッションの主題に興味のある人について簡単に報告します。一方で、DBMSについてはまったく自明ではなく、あらゆる種類のIP、CIS、IARPiなどの開発者にとって特効薬の役割を主張します。 などなど。 ソフトウェア市場と何か関係があるなら、費やした時間は報われるでしょう-私はここ数年の私の最高の経験をここに収めようとしました。 アカデミックではありません。 既にCacheを理解しようとして失敗している場合でも、私を信じてください。時には、ゲートウェイ(最も適切なエスコートを付けた)から最も立派な機関に行く方が効果的です。 そして、なぜそれが隠れて謙虚であることは罪なのか-しばしば衛星の問題です。










したがって、展開する最初の5分。





「そして、突然あなたの優しい光に飽きたら、

あなたは私たちと一緒に場所を見つけるでしょう、誰にとっても十分な雨が降るでしょう。」



V.ツォイ




笑いますが、このプロセスで最も難しい部分は、Webサーバーのインストールと構成です。 含む インターシステムズの同僚はあまりうまく機能しなかったからです。



そのため、私は長年にわたってApacheに依存してきました。 数千のユーザーがいる、完全に受け入れられるオプション。 ソーシャルネットワークやその他のnginxのストレスの多いエンターテイメントは、議論を超えています。 キャッシュは主にDBMSであり、それ以外はすべてです。 しかし! スケーリングしたい-簡単。 今すぐ8-800-2600-に電話したら...スケーリングだけでなく、あなたのオーラ専用に設定されたバグやデッドロックからの個別のアミュレットアミュレットも行います。



しかし、ポイントに。 http://www.apache.org/dist/httpd/binaries/win32/ファイルhttpd- 2.2 .22-win32-x86-no_ssl.msiを取得します。 ここにバージョン22がありますが、後のバージョンを入手する場合、それは怖くありません。主なものは2.2です。 既にApache Webサーバーを使用している場合は、この手順を省略します-キャッシュは設定に最小限の影響を及ぼします-これについては次の図の後で説明します。 IISの愛好家は、自分で設定を楽しむことしか提案できません。これらのページで簡単な方法を提案します。IISは常にフロントルームで動きます。







9回のクリック、「localhost」の2回の入力、いくつかの羽、そして...一番難しい部分。



次のステップは2倍簡単です。 ただし、登録する必要があります: http : //download.intersystems.com/download/ 。 11ものフィールドに入力し、6つのクリックをクリックする必要があります(最高のDBMSメーカーより悪いマーケティング担当者はいません)が、アートには犠牲が必要です。









5分で完了しましたか? 私も!



ここで「出来上がり」と言い、感嘆符を付けたいと思いますが、いや-インターシステムズ(私は愛情を込めて「IS」と言います)の人たちは、私たちがファイルをどれだけうまく処理しているかを示すことができました。



ファイルC:\ Program Files(x86)\ Apache Software Foundation \ Apache2.2 \ conf \ httpd.confを見つけます。



その最下部(ゲートウェイから来たことを思い出してください)では、フォームのひどいデザインを見つけます



#### BEGIN-CSP-SECTION()####

LoadModule csp_module_sa "C:/プログラムファイル(x86)/ Apache Software Foundation / Apache2.2 / CSPGateway / CSPa22.dll"

エイリアス/ csp /「C:/ InterSystems / TryCache / CSP /」



<ディレクトリ「C:/ InterSystems / TryCache / CSP」>

AddTypeアプリケーション/ x-csp .csp .cls .zen .cxw

AllowOverrideなし

注文許可、拒否

すべてから許可

</ Directory>

#### END-CSP-SECTION()####

#### BEGIN-CSP-SECTION(トライキャッシュ)####

エイリアス/ trycache / csp /「C:/ InterSystems / TryCache / CSP /」

#### END-CSP-SECTION(トライキャッシュ)####



私たちはそれだけから出発します

#### BEGIN-CSP-SECTION()####

LoadModule csp_module_sa "C:/プログラムファイル(x86)/ Apache Software Foundation / Apache2.2 / CSPGateway / CSPa22.dll"

#### END-CSP-SECTION()####



少し装飾して、次のようにします。

#### BEGIN-CSP-SECTION()####

LoadModule csp_module_sa "C:/プログラムファイル(x86)/ Apache Software Foundation / Apache2.2 / CSPGateway / CSPa22.dll"

<場所/ csp>

Csp on

SetHandler csp-handler-sa

</場所>

#### END-CSP-SECTION()####



幸福はシンプルさにあります。 厳密に言えば、違いが何なのか覚えていません。 しかし、最終的に表示されるものは機能します。 そしてそれがどのように機能するか。 とにかくデフォルトで書かれているのはバグです。



Apacheを停止して再起動する方法、私はそれを把握したいと考えています。 ヒント:トレイに赤い矢印の付いた赤い羽を探しています-マウスに反応します、信じてください。








さて、ここでキャッシュにいます!





「ひどいひびがありました。

アリスは落ち葉と乾燥した葉の山に落ちました。

彼女はまったく怪我をせず、すぐに彼女の足元に跳びました。」



L.キャロル「不思議の国のアリス」




5分間のコミュニケーションの後、あなたをCache 'に迎えるのがどれほど素晴らしいかわからないでしょう。 まあ、少し後で、悪い「これらはあなたのインターネットです」については、私は答えません。



http://localhost/csp/samples/ZENDemo.Home.cls-hypno-triangleを観察しますか? だからすべてが大丈夫です。 ブラウザからSVGコンテンツを表示するように求められる場合があります。許可し、アドバイスします。



トレイに立方体をすでに見ましたか? そうでない場合は、表示します(画面の右下を見てください):















このキューブから、すべてがさらに進んでいきます。 ただし、青色の場合のみ。 ただし、キューブが灰色の場合、つまり、キャッシュが起動しなかったことを意味します。これは、Cametsの場合です。



Apacheの厄介な設定を開発者に許し、積極的に調整する時が来ました。 さらに、近い将来、IPによって開発されたそれらは私たちを失敗させる以上のものになります。



たとえば、Cache 'cubeでは、押す方法に関係なく、右ボタンでも左ボタンでも、メニューは常に同じです。







まず、システム管理ポータルを見てください。 私は、それを使用する方法を誰も知らず、同時に事業所が繁栄するいくつかの企業を知っています。 ポータルから作業エリアを作成する必要があります。



データベースとエリアを区別します:

キャッシュ 'データベース(データベース)はディスク上のファイルであり、レコードはこのファイル内にあるという単純な理由でデータベースに属します。

ネームスペースは、キャッシュの構成の定義であり、どのデータベースおよびどの目的で使用するかに関する情報を収集します。 エリアは、あるデータベースからプログラムを取得し、別のデータベースからデータを取得できます。 これは、Cacheのスケーリングの基本の1つです-シンプルで非常に便利です。 エリアの定義を変更することで、システムのすべてのユーザーをすぐに更新されたプログラムで動作するように切り替えることができますが、現在のデータ(2週間に1回程度)ですべてのプログラムのバージョンを変更しますが、ユーザーはほとんど気付きません。




エリアを作成します。











ここで、ちなみに、 グローバルエリア (この単語を学ぶ-これはキャッシュに保存されたデータと呼ばれます)とプログラムがさまざまなデータベースから取得できることがわかります。



新しい領域に新しいデータベースを作成したいので、最初にこれを行います:











さらに「Next」、再び「Next」、「Finish」-データベースが作成され、エリアの作成に戻りました。







そしてここに:







Cacheとの次の5分間の会話は完了しました。 これで、実験用の私有化されたフィールドができました。 まだ結果はありませんが、数分であなたと何かを建てます-私は保証します。








スタジオからスタジオへ!





「しかし、彼はそれをどこかでレンチで滑らせた。

ほこりの中に何かを見つけた

内側のどこかで吐いた

どう思いますか、行きましょう!」



A.トワルドフスキー「ヴァシリーターキン」




あなたの手も山で何かを与えるためにかゆみをしていますか? 同意します。 右下の青い立方体をクリックします。











スタジオは、どの領域で作業するかを尋ねます。BSを選択して[OK]をクリックします。パスワードはまだ役に立ちません。







最初は、Cache 'Studioはかなり複雑なデザインで表示されます。







しかし、十字架とドラッグを少し使用して、適切な表現を実現できます。 「検査官」、「表示」など。 必要になりますが、後で、次の写真でそれらをオンにする方法を強調します(上部に4つのボタンがあります)。 私にとってこのように便利です:







この時点で、別の「Hello world!」をデモンストレーションしたいという願望の間の闘争。 プログラミングの現実に対応することが最後に勝ちました-私たちは大人の方法でプレイします。








プログラムはどこから来たのですか?





「ピラミッドはシンプルだが非常に興味深いメカニズムであることが判明した-

幻想を現実に変えた一種の固定剤。

何かを思いついたら、ピラミッドをオンにして、作成するだけです。

想像力は周りの世界と同じくらいリアルになります..」





K.サイマック「トランスファーステーション」




想像力は、ソフトウェアの設計に非常に役立ちます。 しかし、タスクを設定するとき、悪いアドバイザーはいません-それを忘れないことが非常に重要です。 したがって、単純に進みます。 DatabaseAnswers.orgモデルの無料データモデルのライブラリの 1つを使用します したがって、問題のステートメントの段階と設計の両方を省略します。 いずれにしても、キャッシュはアシスタントではありません。



たとえば、モデルを取り上げます。







左から右、上から下に実装することを提案します。 まあ、またはそのようなもの。

クラスは私たちのすべてです。 Studioセクションを忘れて、「CSPファイル」と「その他」は忘れます。 これは、正面に興味がある子供向けです。 そして親愛なる 高齢者 キャッシュ '退役軍人。




そのため、右ボタンを少し動かしてクラスを作成します。





Cacheのクラスはパッケージ内にあることに注意してください。 たとえば、次のように:





パッケージ名とそのネストの発明により、非常に注意することをお勧めします。 Occamのカミソリは 、かつて私に提示されたように、エンティティの数を必要以上に増やすべきではないことを示唆しています。 しかし、これに対処する人はほとんどいません。 結局のところ、最も難しいことは、ありふれたアイデアを理解することです-あなたはそれを知ることができ、さまざまな器官でそれを再現し、他の人に教え、それを使用することができます。 しかし、それを理解しないでください。 ル・シャトリエハイゼンベルク 、オッカム、 サンドイッチの原則多くの人々は決して理解することができません。 結局、彼らはすでに彼らを理解していると確信しています。



したがって、クラスを作成する要求の後、対応するダイアログが表示されます。







パッケージおよびクラスとは何ですか?

ここで、 デザインパターンを思い出します 。 「どのパターンをより頻繁に使用しますか?」という質問へのインタビューの申請者が 彼は答えます:「異なる-今、 コンベアはうまくいっている...」-あなたはすぐにあなたが責任者であり、日常の準備ができていることを理解します。 また、キャッシュ内のパッケージに名前を付ける準備ができていません。



キャッシュデザイナーは、常にドメインオブジェクト(ドメインモデル、DM)を考慮する必要があります。 夜。 通り ランタン。 薬局。 抽象化を使用する場合-玄関から入力してください。 ここにはすべてが単純な方法であります。伝統的に、すべての種類の「会計記録簿」を流動的な状態にして合併します。 「まあ、どうやってそれをDMに呼べばいいの?」といった苦痛の補償として。 遅かれ早かれ、完璧な相乗効果が始まります-システムは、設計者が準備しなかった影響に適切に対応し始めます。



このテンプレートを知っているというサインは簡単です。顧客の新しいリクエストの半分に対して何もする必要はありません。 システムは実際のビジネスとまったく同じように動作します-それは繁栄します。



DMはメインテンプレートです。 そして、彼は最初に私たちに役立つでしょう。



別の小さな発言:

キャッシュは、ドメインモデルの適切な実装以上のものを提供します。 ここでは、非常に簡潔で便利な手段により、データだけでなく、対応するクラスのサブジェクト領域のオブジェクトの動作もカプセル化できます。





だから、我々は呼び出します:







すぐに[完了]をクリックします。 実際のところ、「次へ」をクリックすると、まったく役に立たない追加のフォームが表示されるため、時間を無駄にしたくありません。



これは、Cacheの空のクラスがまさにどのように見えるかです:







私はあなたとの関係を知りませんが、そのような構造を見たとき、私の心は鼓動しません。 これ以上。 これらの愚かな「public static void main」はなく、他にはstdio.hが含まれています-自由です!



明らかな単純さ-ISによって親切に提供された数千行のシステムコードは、現在(もちろんコンパイル後に)このクラスで作業できるようになります。 まだ何もしていませんが、システムはそのインスタンスの作成、削除、リクエストの実行などの方法をすでに知っています。 オブジェクトのストレージとそれらへのアクセスを実装する%Persistentシステムクラスから継承されているからです。



しかし、データがなければ、これを行うことはあまり賢くありません。 クラスにプロパティを入力します(ウィンドウ内で右マウスボタンを使用します)。











また、すぐに「完了」をクリックすることをお勧めします。 「次へ」ボタンを使用しますが、少し後で使用します。



スキームを確認します。 「プレゼンテーションの場所」エンティティには、さらに2つのプロパティがあります。これらは、右ボタンで同じ方法で追加されます。 または、「Ctrl-C + Ctrl-V」を使用します。 その後、すぐにクラスをコンパイルすることをお勧めします。







次に、このクラスが機能することを確認します。



まず、オブジェクトとしてタッチします。 簡単にするために、Cache 'ターミナルを介してこれを行います。 トレイ内のキューブをクリックして、「ターミナル」を選択します。











コマンドラインCache 'でターミナルウィンドウを取得します。 「USER」はデフォルトの領域です。 設定を調べて「BS」に変更できます。







しかし、もっと簡単な方法があります-「 zn 」エリアを変更するコマンド。 エリアに移動した後、クラスのインスタンスを作成し、プロパティを入力して保存します。



ノード:papahost、インスタンス:TRYCACHE



USER> zn "BS"



BS> set obj = ## class(place.One)。%New() //コンストラクタを気にしない



BS> set obj.Name = "Big Top" //ゲッターセッターを気にしない



BS> set obj.Description = "駅の近くの駅で"



BS> do obj。%Save() //データの保存方法を気にしない




心配しないでください。 これは確認専用です。 実際の開発では、オブジェクトが出現し、より文明的に保存されます。 これについては少し低くなります。

すべてのオブジェクトはSQLテーブルとしても表されます。 実際、データへのアクセスがいくつかあります-それらをオブジェクトとして(上記で試しました)、テーブルのように(以下で詳しく説明します)、いわゆる 「直接アクセス」。 後者については、一般的には黙っています。もしあなたがそれについて知らないなら、あなたはほとんど失いませんが、それを理解したいなら、あなたはそれをマスターできると思います。



キューブ上のデータにSQLアクセスするには、「システム管理ポータル」を選択し、SQLクエリに移動する必要があります。







次:

1.エリア「BS」を選択します

2.「select * from place.One」というクエリを入力します

3.リクエストを実行します

4.保存したオブジェクトが表示されているテーブルの行が表示されます。







SQLアクセスにより、通常のSQL構文を最大限に活用できます。 実験することはできますが、アドバイスが1つあります。ドメインクラスではINSERT、UPDATE、およびDELETEコマンドを使用しません。 トリガーとイベントの処理(保存時など)は異なる場合があります。 また、これらのコマンドを使用すると、サブジェクトエリアの実装に投資されるすべての労力は灰になります。 SQLコマンドの代わりに、メソッド%New()、%Save()、%DeleteId()を使用します。



それで、あなたも成功したことを願っています。 つまり、単純なプロパティを持つクラスを作成し、そのパフォーマンスを確信しました。








最初の申請





「プレイボーイフィギュア、ココシャネルランジェリー、

そして、女の子が新しいモデルであっても...

ポップを許可します。隠さずに言います。

ポップを許可して、連絡を取ります。」





I.ラグテンコ




どのバージョンのCache 'ZENが登場したのかは正確には覚えていませんが、これからは、超薄型クライアントがCacheの唯一かつ唯一の代替クライアントになったことを確信しています。 CSP(キャッシュサーバーページ-ASP、JSPシリーズなどの技術)の期間中に、CSP +キャッシュのタスクからPHP + MySQLのタスクへ、またはその逆への移行が穏やかでスムーズだった場合、ZEN itもうそうではありません-ZEN(およびサブジェクトエリアを実装するデータベース)を使用する人件費は非常にばかげているため、他の設計、開発、および保守の方法は大変な労力と見なされます。 一般に、あごひげを生やしたジョークのように、新しいタスクにCache 'でZENを使用しない場合は、顧客に対して愚かな行動または意地悪な行動をとります。



そして、私は今デモに費やすよりも長くそれを書きました。 [作成]をクリックします。







[Zen]タブに移動して、[新しいZenページ]を選択します。







次に、入力用のフォームが提供されます。 正直に言うと、5年以上ZENと仕事をしていて、おそらく3度目に会うでしょう。 基本的に、ページを作成するには、すでに作成されている最適なZENページのコードをコピーし、必要な変更を加えます。 しかし、最初のページではそれを使用します。







zenページは同じクラスであることは既に理解しました。 また、それらは袋に梱包されています。 名前を考えましょう:







そしてすぐに「完了」をクリックします。 「次へ」は触れないでください。製品サプライヤにとって厄介な場所に連れて行かれます。 次のようになります。







うわー! テンプレートを使用しなかったと言ったとき、私はまさにそのような効果を念頭に置いていました。 整理してコンパイルします(Ctrl-F7):







基本的に、アプリケーションを作成しました。 「Hello world!」が表示されませんか? 私も。 しかし、アプリケーションは準備完了です。 メニュー(編集ボタンの右側)または「F5」でグローブをクリックしてアクセスできます。 しかし、2つのニュアンスがあります。



1.表示用のアドレスはhttpのようになります。// localhost:57772 / csp / bs / zui.Places.cls-事実、Cacheのインストール時に、必要性と何らかの理由で試行のためにポート57772にWebサーバーをデプロイするそれを通して、スタジオでの成功を示します。 このWebサーバーには多くの制限があり、使用することは望ましくありません。 したがって、ApacheでStudioからのページの表示を設定します-このため、Studioメニューで[プロジェクト]-[設定]を選択し、表示されるウィンドウの[詳細]タブでポートをクリアします( localhostが出るようにコロンからすべてを削除します):







その後、Studioメニューでプロジェクトを保存します-[ファイル]-[プロジェクトの保存]。





2.実際には、エリアを作成したときに、システムがそのためのcspアプリケーションを作成しました(ZENはcspの上で実行されます)。 新しく作成されたアプリケーションへのアクセスは制限されています-名前とパスワードの入力を求められます。 そしてこれはいいです! ただし、ユーザーを作成して権限を割り当てるには、少し時間がかかります。 キューブを待って、「システム管理ポータル」を開きます







(そして、ついにISがDeepSeeセクションを削除するか、このマーケティング担当者を解雇すると、私はそれを購入しません!)







「新規ユーザーの作成」ボタンは非常に目立ちます-特にロシア語に少し精通している人の目を傷つけます。 興味深いことに、この翻訳者も試験に合格しましたか? 私たちは昔ながらのやり方ではないようです。 セキュリティについて、キャッシュを使用する場合は、注意してください-少なくとも「システム間キャッシュ」DBMSセキュリティ標準に注意してください-あるテクニカルライターの1か月の作業が開発チームの1年の試練よりも役立つ場合があります-テキストは非常に有用です。 ポータルのセキュリティ監査の場所を見つけた場合-必ず調べてください-視野を広げます。



デートの目的で、私たちはただそれを行います-権利%Allを持つユーザーを作成します-すべて、つまり「オールインクルーシブ」-すべてが許可されています-IPはあなたを神のように感じることができます(時々):







名前とパスワードを2回入力します-手で他のものに触れないでください。 またね [保存]をクリックして、[ロール]タブに移動します。 %Allロールを選択して、ユーザーに割り当てます。







次のようになります。









実際、Cache '(およびZEN)は、ユーザーロールリソースアプローチを完全に実装しています。 しかし、私はこれのための私の時間は十分ではないかもしれないと恐れています-あなた自身を実験してください。 多くの肯定的な感情を取得します。 そう願っています。 しかし、スタジオに戻って「F5」(またはグローブ)を押します。 zenページでユーザー名とパスワードを入力すると、最初のアプリケーションが開きます。







そして再び-これ以上。 美人! ある「Hello、world!」がその存在でこの楽しくきれいなページを台無しにするかもしれないと想像するのは難しいです。 (外国人エージェント)。



経験豊富な開発者であれば、私が本当に満足していることを理解できます-もちろん、エラーはありません。 彼女は回転しています! 作業の90%が完了しました。








最初の作業(!)アプリケーション





「雷雨を作りたかったのですが、ヤギを手に入れました。

黄色の縞模様のピンクのヤギ。

尾脚の代わりに、ホーンの脚に。

二度とあのヤギに会いたくない。」





不明な著者




この部分は、前の部分より少し短くする必要があります。 自然なこと-空白のページの形で傑作を作成することは、サーカスのパフォーマンスの場所を入力して表示するためのフォームを準備するよりもはるかに困難です。



クラス「ビューの場所」の1つのオブジェクトをデータベースに既に保存していることを覚えていますか? その表示に対処しましょう。これを行うには、「tablePane」という名前のZENコンポーネントが必要です。







以下では、「ツール」メニューから「ローカルにインポート」からStudioにダウンロードできるソースを配置します。



ソース:places1.xml



コンパイルして何が起こったかを確認







します。レイアウトに問題がありますが、これは修正可能です。主なことは、データを表示することを学んだことです。次に、ユーザーインターフェイスから記録します。ZENのドキュメントには、MVC(モデル-ビュー-コントローラー)テンプレートの実装について多くのことが書かれていますが、私はそれを読んでおらず、アドバイスもしていません。



最初に、%ZEN.DataModel.Adaptorから保存されたクラスを継承する必要があり







ます。Source one1.xml



そして、インターフェイスクラスに以下を追加します。

1.コントローラー

2.コントローラーがそのデータに関与していることを示すフォーム

3.イベントの処理方法(ここではメソッドがデータを保存し、テーブルを更新します)







ソース:places2.xml



ブラウザーで:







エントリーを追加:







成功したか?



テーブル行を選択するときにオブジェクトデータをコントローラーにロードするには、少しのコードも必要です。同時に、削除、インデント、その他の設備を追加します。







出典:places3.xml



最後の見出しから始まる私のテキストを見ると、私は哀れみと謙虚さの明らかな欠如を感じます-しかし、私たちはそれをしました-AJAXなどを使用して超薄型クライアントでDBMSデータを操作する方法を学びました。これを事実上知らない。








コミュニケーションズ





« ,

,







.




インターシステムズは、オブジェクト間の関係にいくつかのオプションを提供します。そのうちの2つは、オブジェクトタイプのプロパティと1対多の関係です。 Cacheでの私のすべての経験を思い起こさせます。オブジェクトコレクションプロパティ、親子関係、または他の1対1の関係を使用しないでください。私は個人的に、欠陥を設計するためにそのようなひねくれたニーズが発生する状況を原因とする傾向があります。 「親子」の実装を書いたプログラマーの仕事も残念ですが、この仕事はカロリーと予算の無駄でした。ゴミ箱。



1対多の関係とオブジェクトプロパティを使用すると、システム内のすべてのバインドの問題を簡単かつ普遍的に解決できます。それだけです-例えばサーカスを見てください。



グラフのPlacesオブジェクトには、タイプ "外国 Ref_Place_Types 『のクラスに言及、』 place_type_code「という名前(あなたがキャッシュを持つ作品「に行っている場合は、これらを忘れる)、」外部キー『



』参考「それが私たちが、マニュアルを扱っていることを示しているが、私は用語の使用反対だとして「リファレンスブック」-メジャーとウェイトのリファレンスブックまたはBradisテーブルを扱っていない限り、愚かにもリファレンスブック(リファレンス値のテーブル)と呼ぶオブジェクトは、ある時点で動作を獲得し、リファレンスブックになるのをやめることがあります-新しいものが表示されますプロパティと新しいロジック-および制限いわゆる「参照」に課せられた大きな仕事に害を与えることができます。

したがって、クラス「プレゼンテーションの場所のタイプ」を作成します。私たちの場所をクリックしました。Studioクラス階層の1つをマウスの右ボタンでクリックし、[コピー]を選択した後、クラスコードをわずかに修正しました。同様に、サイトタイプを操作するためのインターフェイスを作成しました。



ソース:type1.xmlplaceTypes1.xml



ブラウザーでは、次のようになります。







次に、「プレゼンテーションの会場」クラスで「タイプ」プロパティを定義する必要があります。少し考えた後、望ましくないタイプの削除は私たちにとって望ましくないという結論に達することができます-タイプを削除するとき、タイプを削除する場所がないことを確認したいと思います。このロジックは書くのが面倒であり、リレーションシップの使用に関する制限は目立たないため、リレーションシップを「1対多」として説明します。 Studioのplace.Oneクラスで、右クリックして[追加]-[新しいプロパティ]を選択します。















*「Places」プロパティはまだplace.Typeクラスにありません-したがって、私はそれを手で入力しました-スタジオがそれを作成します:







その後、1対多の関係を記述する2つのクラスが2つのクラスの説明に表示さ



れます。 1つ:

///サイトタイプ

リレーションシップタイプAs place.Type [カーディナリティ= 1、インバース=プレイス];



インデックスタイプ




および所定の場所:タイプ:

Relationship Places As place.One [カーディナリティ=多、逆=タイプ];




コンパイルします。



インターフェイスの「サイトタイプ」フィールドの入力を整理するために、新しいzenコントロールを使用します(入力フィールドの後dataCombo探します)。



<text label = "Name" dataBinding = "Name" />

<text label = "Description" dataBinding = "Description" />

<text label = "Details" dataBinding = "Details" />

<dataCombo dataBinding = "Type"

sql =「select ID、place.Typeからの説明」

sqlLookup =「place.TypeからDescriptionを選択、ID =?」

/>




sqlパラメーターで、ユーザーに選択肢を提供する方法をコントロールに指示し、sqlLookupでコントローラーからデータをロードする方法を指示しました(たとえば、テーブルの新しい行を選択するとき)。



表に表示するために、「矢印」を介した暗黙の結合の非常にお気に入りの機能を使用します。



<tablePane id = "placesTable"

tableName = "place.One"

onselectrow = "zenPage.onSelectPlace()"

valueColumn = "ID"

>

<column colName = "ID" hidden = "true" />

<column header = "Name" colName = "Name" width = "20%" />

<column header = "説明" colName = "説明" width = "30 % "/>

<column header ="詳細 "colName ="詳細 "width =" 30% "/>

<column header ="タイプ "colName ="タイプ "colExpression ="タイプ->説明 "/>

</ tablePane>









同様に、イベントクラスとそのタイプをすばやく作成できます。







プロジェクトのソース: circus1.xml



結果のインターフェイスは次のようになります。







あなたが正直に立ち止まって次の部分を考えるか延期する必要がある時が来ました-ボリュームは予想外に大きいことが判明しました。



キャッシュについて私が言いたかったこと:



ドメインオブジェクト、それらの関係、および動作を設計するための強力なツールを入手しました。 Cacheを少なくとも非合理的に使用する場合は、「ドメインモデル」パターンを使用しないでください。



ZENを使用すると、データベース設計からGUI実装にすばやく移行できます。これにより、製品が顧客を満足させるまで、数百のスケッチやプロトタイプを実行できます。



昨日の学生は数日で技術を認識します。 2週間後、彼が書いたコードは簡単に本番環境に入ります。



多くの場合、変更は次のリリースまで待たないことがあります。ユーザーの要件は電話での会話で満たすことができます。 多くの場合、ユーザーは「F5」を使用して変更されたコードを操作する必要さえありません。





話す時間がないもの:



ストレージレベルの継承は、同じデータにアクセスするためのさまざまなインターフェイスを提供する優れたツールです。



暗黙の参加。 テキスト(およびソース)に例がありますが、ツールの力は確かに明らかにされていません。





そして著者から:



私はただのアイドラーだと思っているだけでなく、怠の説教者でもあります。 遅延作成されたコードはすぐに表示されます-簡潔で理解しやすく、意図したとおりに正確かつ非常に効率的に実行されます。 最後の要因は重要です-プログラマーは普遍的なコードを考えて記述しますが、その運命は、システムのライフサイクルの終わりまでパラメーターの予測された質量にまったく何も入れず、プログラマーが想像する数百の代わりに2つの値のみを返すことです(アナリストが悪い場合)。 怠zyなプログラマーも簡単に区別できます-彼は陽気で効率的です。 彼は世俗的なゴシップとNoSQLホリバーを知っています。 彼は劇場を訪れ、子供たちに従事しています。 彼がプログラムする場合は、それなしではできない場合にのみ。



インターシステムズのメリットは小さいと主張する人もいます-主なものは、M言語、グローバル、および非木造建築のその他の楽しみです(最初のバージョンでは、ここでフロイトに封印され、作業を入力しました)。 私たちのプログラマーの多くは数年にわたってCacheで作業しており、グローバルで作業するためのコマンドすら知らないのです。



インターシステムズのメリットは、「everyday M」を忘れることを可能にしたことです。完全に異なる料理の味を飾るスパイスとしてのみ使用することを提案し、そのレシピを紹介し始めました。





重要な脚注:上記のすべてはロシアの会計基準に適用されません-悪名高いRAS、会計を編成する必要がない嫌な例です。 私は会計ソフトウェアを書くことはありません。 私は20年前に自分自身に言いました。 付着する。 ストールに「配線」オブジェクトはありません! ショーケース、売り手、キャッシュデスクがあります。 22時までアルコールのオブジェクトがあります。 しかし、配線オブジェクトはありません。 その配線ですか。





ご清聴ありがとうございました。






All Articles