生成されたアプリケーションのアーキテクチャ

OutSystems Platformには、.NETおよびJavaベースのアプリケーション両方を生成し、デプロイすることのできる、ユニークなデプロイエンジンが含まれています。
どちらの言語のアプリケーションにも、3つのタイプのコンポーネントがあります。
コンポーネントは、生成されたソースコード、ビジネスロジック、およびデータベースと一緒にドキュメントが完備されたアプリケーションプロジェクトソリューションに同梱されています。

このデュアルスタックのアーキテクチャにより、特定のビジネス要件に最適なスタックを選択することができ、既存アプリケーションの書き直しや交換を行う必要なく、別のテクノロジーへ簡単に移行することができます。

OutSystems Platformの利用契約が終了した場合でも、明確に定義された手順に従ってコードをOutSystems Platformからデタッチすることができるので、お客様が実装したアプリケーションはテクノロジーに依存しない状態を保つことができます。

基盤となっているテクノロジーと開発を切り離す形式に従ってコードが生成されます。最終的には、オープンかつ標準に準拠し、文書化された最新のビジネスアプリケーションが、.NETまたはJavaで実装されます。 

アプリケーションコンポーネント

OutSystems Platformを使って作成したアプリケーションには、自動生成、ランタイム、カスタムの3つのタイプのコンポーネントがあります。

自動生成コンポーネント 

このコンポーネントは、コンパイルや公開のためにアプリケーションがサブミットされるときに自動的に作成されます。自動生成コンポーネントには以下が含まれます。

  • ページ(aspxまたはjsf
  • 再利用可能コントロール(ascxまたはjsp
  • JavaScriptファイル(js
  • カスケーディングスタイルシートcss)
  • イメージ(gifjpgpng)、およびその他のリソース
  • ウェブサービス(asmxまたはwsdlおよびサーブレット
  • コードビハインドクラス(dllまたはjar
  • 参照される他のアプリケーションへのプロキシ(dllまたはjar

ランタイムライブラリ

ランタイムライブラリは複数のコンポーネントのセットであり、基本的な描画機能やOutSystems Platformにあるいくつかのサービスへのアクセスなどの基本機能をサポートするあらゆるアプリケーションに含まれます。

  • 包括的なプラットフォームライブラリ
    生成されたアプリケーションのすべてで使われるクラスおよびメソッドであり、Service Studioで利用できるOutSystems Platform内蔵の機能、データベース接続管理ユーティリティ、Excelワークブック管理、サイトプロパティ管理、Ajaxサーバサイドユーティリティ、タイマー関連ユーティリティなどがあります。
  • ウェブライブラリ
    標準的HTMLブラウザに新しい機能(例えば、ウェブボタン内の確認メッセージ表示機能のサポート)を追加して、Microsoft Web UIコントロールまたはJEE JSFコントロールを拡張するクラスおよびメソッド。 

カスタムコンポーネント

カスタムコンポーネントはIntegration Studioで開発され、OutSystems Platformを拡張して、外部システムとの統合を可能にします。Integration Studioで直接作成され、Platform Serverに公開された有効なDLL、JAR、またはその両方が含まれます。カスタムコンポーネントは、それを参照するアプリケーションに関連して使用され、コードはアプリケーションがデプロイされているフロントエンドサーバ上で実行されます。次の図は、1つのアプリケーションが複数の基礎コンポーネントで構成されている様子を表しています。



アプリケーションソリューション

アプリケーションのソースコードがService Centerからダウンロードされると、OutSystems Platformは、前述のコンポーネントをすべて、基本方針に沿って的確に進められたプロジェクトソリューションにインクルードします。このソリューション(.slnまたは build.xml)は、Visual StudioやEclipseといった標準の.NETまたはJavaの統合開発環境を使って、いつでもオープン、コンパイル、およびビルドできる状態になっています。 

連携用のアダプタまたは他のアプリケーションとの間に依存関係がある複数のアプリケーションが実行されていると、OutSystems Platformは、お客様の各アプリケーションをコンパイルするために必要な、自動生成されたソースコード、ライブラリ、および依存関係すべてと整合が取れたフルパッケージを提供します。

次の例は、Directoryアプリケーション(OutSystems Forgeから入手可能)が、ソースコードをダウンロードした後、Visual StudioおよびEclipseでどのように見えるかを表しています。


生成されたソースコード

OutSystems Platformにより生成されたすべてのコードは、.NETの場合でもJavaの場合でも、一連のルールと最適化を適用することにより、アプリケーションが正しく動作し、スケーラビリティや信頼性の問題が生じないように作られています。このようなルールや最適化はアプリケーションのすべてのレイヤーに適用され、データベースアクセスからウェブページのサイズまで、最高のパフォーマンスを実現します。



コードの可読性

生成されたすべてのコードは、OutSystems Platformから完全に分離可能であり、OutSystems Platformの使用を止めた場合でも高い可読性とメンテナンス性を持つよう、一連のルールに従って作られています。主な基準は以下のとおりです。

  • Service Studio要素と生成されたコード間のダイレクトマッピング
    このマッピングは、名前だけでなく、コード構造に関しても、定義されたアプリケーションアーキテクチャが実際に生成されたコードに反映されることを意味しています。
  • Service Studioで定義された通りすべてが記載されたコード
    OutSystems Platformツールを使って定義された説明とメモが含まれているため、コードを見ると、コンテキストがService Studioのものと似ていることが分かります。また、Service Studioにコメントとして書き込まれている表現もすべてコードに含まれているため、コードの各行が何を実装したものなのか簡単に把握することができます。
  • 「go-to」構文を避けるためのグラフ解析
    OutSystems Compilerは高度なグラフ解析を使用し、生成されたコードに「go-to」文を使用しないようにします。これにより、アプリケーションがどれだけ複雑でも、コードは直感的に読むことができ、メンテナンスしやすくなります。

ユーザインターフェース

Service Studioで設計したアプリケーションインターフェースは、ページの要素に関連づけられ.aspxまたは.jspファイルでインスタンス化されたマークアップコードの中に、ダイレクトマッピングを持っています。また、画面描画や入力値の確認の前に実行されるロジックなど、ページに直接関連するロジックを含むライブラリの背後にあるコードの中にも、ダイレクトマッピングがあります。

次の図は、OutSystems Platformによって生成された、「edit employee」の詳細ページのコードを表しています。 

アプリケーションのパフォーマンスとスケーラビリティの要件に応じるため、OutSystems Platformは、デタッチされた後でもソースコード中に保存される一連のコード最適化機能を提供します。以下はその例です。 

  • ページを圧縮する
    アプリケーションが使用する帯域幅が最小限となり、ユーザのリクエストがより早く処理されるようにするため、すべてのページを自動的に圧縮し、サイズを縮小します。
  • ページを部分的に描画できる
    内蔵されているAjaxのサポート機能を利用して、アプリケーションのページを部分的に描画することができます。その結果、サーバに送信される情報が少なくなり、ページの一部だけが返されます。これにより、使用される帯域幅が少なくなり、応答性が向上し、ユーザエクスペリエンスが改善されます。
  • Ajaxのリクエストが常にキューに入れられる
    生成されたコードにより、Ajaxのリクエストが常にキューに入るようになります。そのため、特定のユーザが同時に複数のリクエストをサーバに送信することによってウェブアプリケーションサーバをいっぱいにしてしまうことがありません。
  • 重複したAjaxリクエストを脱落させる
    生成されたコードにより、Ajaxリクエストが一度だけウェブアプリケーションサーバに送信されるようにし、これによりサーバの負荷上昇を防ぎます。例えば、AutoCompleteパターンからの複数のリクエストがキューに入れられた場合、最後の1つだけがサーバに送られます。
  • グラフ解析が必須フィールドだけをView Stateに送信にする
    どのスコープ変数が読み出し、書き込み、または完全にアクセス不可になっているかを確認する高度なグラフアルゴリズムを利用することにより、OutSystems Compilerは必須フィールドだけがView Stateに送信されるようにするコードを生成し、ページのサイズについて高度な最適化を行います。

ビジネスロジック

OutSystems Platformは、コードを書くことなく、代わりに条件分岐、繰り返し、呼び出しの入れ子、代入、クエリ、その他パッケージに同梱されたまたは拡張されたさまざまな視覚的構成要素など、シンプルなビジュアル構文のみを使用した、複雑なビジネスロジックのモデリングを可能にします。これらの構成要素とサービスは、作業量を大幅に減らしながら、アプリケーションをエンタープライズ級のシステムにします。これは、トランザクション処理、監査、例外処理、Excelファイル処理、統合認証、およびユーザ/プロファイル管理などの機能が、すぐに使える視覚的な要素としてOutSystems Platformで利用できるサービスだからです。

さらに、OutSystems Platformは、すべてのアプリケーションコンポーネントにおいてエラーがなく整合の取れた変更を実現する、完全な参照チェックおよび自己回復エンジン(TrueChange)を使用しています。例えば、ビジネスルールが変更された場合、このエンジンは必ず、ロジックのその部分を使用する関連したビジネスサービス、データ、およびユーザインターフェース要素すべてを自動的に更新します。 

次の図は、OutSystems Platformにより生成された、従業員の誕生日を更新するビジネスルールのコードを表しています。

組織がOutSystems Platformの使用を止めた場合、その組織の開発者はビジネスロジックの作成や変更の際にすべてのビジュアル要素を使うことができなくなります。また、完全な参照チェックおよび自己回復エンジンの機能も活用できなくなります。しかし、標準の.NETやJavaで生成された手書きのコードは、従来のIDEを用いて変更することができます。また、OutSystems Platformにより最適化されたコードは、引き続き利用することができます。 

継続のためにカスタムコードの起動を内包

カスタムコンポーネントには、カスタムアルゴリズムを加える場合でも、単に外部システムと統合する場合でも、あらゆる種類のC#またはJavaコードを含めることができます。Visual StudioまたはEclipseを用いてコードを作成し、Integration Studioを用いてラッピングした場合、そのコードにはパフォーマンス上の問題がある可能性があります。このカスタムコードを起動したとき、その実行に想定以上の時間がかかる場合、OutSystems Platformはタイムアウトにより自動的にその実行を破棄して、必要以上のCPU使用またはメモリ消費により他のアプリケーションのパフォーマンスが落ちないようにしています。

バッチプロセスの調整

OutSystems Platformを使って、非同期で実行されるビジネスロジックをモデル化することができます。複数の非同期バッチプロセスを処理できるため、効率の悪いプログラミングが施されたアクティビティがスケジュール設定されたことによって高負荷が生じ、それがアプリケーションのユーザにサービスを提供するために必要な処理能力を占有してしまわないよう、自動的に調整されます。

データベース

Service Studioのビジュアルモデルに従い、サードパーティのデータベースに基づいて、従来のような複雑なSQL文に頼ることなく、永続的なデータリポジトリを作成、モデル化、統合することができます。OutSystems Platformは、さまざまなリファクタリング処理中に、データベースの作成と調整、およびアプリケーションとの整合性に関する処理を行います。

データベースのパフォーマンスに関しては、アプリケーションには一連の最適化がなされています。その最適化は、組織がOutSystems Platformの使用を止め、ソースコードを抜き出してしまった場合でも保持されます。適用される最適化は、以下のとおりです。 

  • 接続をプールする
    これにより、データベースコマンドの実行パフォーマンスが向上し、データベースへの接続が確立されるまでの待ち時間が減少します。また、接続のプールは、アプリケーションにアクセスするユーザ1人に対して1つの接続を使用していることから生じる、オペレーティングシステム、ネットワーク、およびデータベースリソースの過剰使用を防止します。
  • 接続は必要な場合にのみオープン状態を維持
    使用が終了したら自動的にリリースされます。この処理によりデータベースリソースの消費が減少するので、スケーラビリティを増大させることができます。
  • トランザクションは常にコミットまたはロールバックの後にリリースされる
    開発者が何をコーディングしたかにかかわらず、コミットまたはロールバックのいずれかによって、最終的には必ずリリースされます。その際に、アプリケーションが孤立トランザクションやロック状態のテーブルを残さず、不要なリソースを消費しないようにします。
  • クエリは必要な場合にのみメモリにコピーされる
    実際には大量のデータを処理することができますが、この処理により、アプリケーションのメモリ消費を可能な限り抑えます。
  • クエリフィールドは必要な場合にのみ読み出される
    高度なグラフアルゴリズムによりビジネスロジックおよびユーザインターフェースのフィールド使用状態が確認され、クエリは独占的に必要なフィールドをデータベースから読み出します。その結果、開発者が何をコーディングしたかにかかわらず、データベースの負荷とデータ転送の待ち時間が最小化されます。
  • 継続のためにクエリが内包される
    このようにさまざまな最適化が図られているにもかかわらず、一部のクエリの実行に時間がかかりすぎている場合、OutSystems Platformはその処理をタイムアウトにより自動的に破棄し、データベースが処理の重いクエリの影響を受けないようにします。これにより、アプリケーションは最適なレベルで実行することができます。
  • テーブルには主キーおよび外部キーに対する自動索引生成の機能がある
    これにより、最も一般的なデータベースクエリが最適化されます。より高度なクエリが更なる索引生成を必要とする場合は、Service Studioで視覚的に作成することができます。