2009年10月27日

3層スタイルC/Sアプリ作成術 サンプルプログラムソース

 業務アプリケーションを作成する際、データベースに何を選択するか。
 データベースコンポーネントに何を使うかは、悩みどころだと思います。
 将来のことまで考えると正解があるようで、ないのが現実だと思います。

 弊社では、とりあえず今ベストだと思われるものを選択。
 ただし、依存部分を極力減らし、将来、上記の変更があった場合にも、なる
べく少ない変更で対応できるようにするように考えました。
 この方法は、”第10回 エンバカデロ・デベロッパーキャンプ”で発表させて
いただきました。

 このサンプルは、下記セッションの内容に基づいたサンプルプログラムです。
大阪会場T6セッション
「業務管理システム開発の実例にみる3層スタイルC/Sアプリ作成術」
資料URL
http://edn.embarcadero.com/jp/article/images/38706/t6.pdf

FireBird+IBX, FireBird+ADO, FireBird+DBX, Oracle+DBX、dBase+BDE(*1)
の組み合わせでのソースを作成しています。
クライアントソースは、そのままに、サーバー側ユニットを切り替えることで
上記、DBとDBアクセスコンポーネントの入れ替えを確認できます。
それおぞれの実装の違いの確認もできます。

また、この手法をとることにより、生産性もあげられ、メンテナンスもしやすいシステム構築が可能です(自己評価です)


(*1)2009/3/31バージョンで追加

また、2009/3/31改訂版では、3層SOAP実装のプロジェクトも公開しています。

詳細は、下記圧縮ファイル内のReadMe.txtをご参照ください。


###############################################################
残念ながら、サンプルソースについては、コメントがほとんどありません。
このソースに興味を持っていただき、もう少し詳しく説明がほしい方見えましたら、
交通費+呑み代 にて、ご訪問し、解説させていただきます。
メールにてお問い合わせください.
###############################################################


サンプルソース(Sample.20090404.zip)
2013.01.16 リンク先変更しました(Vectorのサイトにとびます)

初版公開 2009.03.24 Sample.20090324.zip
改定    2009.03.31 Sample.20090331.zip
   dBase+BDE サーバユニット追加
   3層SOAP 実装プロジェクトの追加
   その他、バグ等もろもろ修正
改定    2009.04.04 Sample.20090404.zip
   バグ修正


posted by しんくそふと at 17:08| Comment(0) | TrackBack(0) | 3層スタイルC/Sアプリ作成術

2012年11月26日

DelphiXE3版 "3層スタイルC/Sアプリ作成術"サンプル


DelphiXE3版の"3層スタイルC/Sアプリ作成術"サンプルです。

Sample_20121126.zip


今回は、C/Sモデルとそこから展開される、SOAPクライアント、SOAPサーバーのプロジェクトが入れてあります。
データベースアクセスについては、DBXからFireBirdアクセスのみです。
SOAPサーバーについては、DelphiXEから作成できるようになったVCLスタンドアロンアプリのプロジェクトと、CGIアプリのプロジェクトの2種類を作成しています。

VCLスタンドアロンアプリについては、C/Sアプリとソースを共有するため、共有リソースの排他などは考えていませんので、あくまでもデバック用として使用すると考えてください。サーバーモジュールとしてのデバックは非常に便利です。C/Sアプリで見つけられない、3層化のためのドライバモジュール部分の不具合の確認に使用できます。

Win32でのみ動作確認しています。(追記)
posted by しんくそふと at 14:30| Comment(0) | TrackBack(0) | 3層スタイルC/Sアプリ作成術

SOAP Interface の引数


SOAPサーバーから、複数のデータセットの内容を戻したいとき、下記のような引数を設定することになるが、

procedure SSGetMstSlave (
                           const AParam: string;
                           out ACdsMst: Variant;
                           out ACdsSlave: Variant ); stdcall;

Variantが複数あるとAccessViolation例外が発生することがある。
この場合、XMLに変換して戻すようにするか、戻り値として独自のクラスを定義する方法がある。

弊社では、
  TRtn2Class = class(TRemotable)
  private
    FRtnCode: Integer;
    FRtnMsg: string;
    FRtnVar1: Variant;
    FRtnVar2: Variant;
  published
    property RtnCode: Integer  read FRtnCode write FRtnCode;
    property RtnMsg:  string   read FRtnMsg write FRtnMsg;
    property RtnVar1: Variant  read FRtnVar1 write FRtnVar1;
    property RtnVar2: Variant  read FRtnVar2 write FRtnVar2;
  end;

のようなクラスを定義している。
(SOAPは独自クラスが定義できる。DelphiのSOAPサーバーインターフェイスの自動生成のサンプルコードにも例がある。)

下記の定義となる
function SSGetMstSlave (
                           const AParam: string ):TRtn2Class ; stdcall;
戻り値として
    FRtnCode  戻り値のコード
    FRtnMsg  エラー等のメッセージ
    FRtnVar1 ACdsMstのデータ
    FRtnVar2 ACdsSlaveのデータ
を設定するようにしている。
posted by しんくそふと at 16:58| Comment(0) | TrackBack(0) | 3層スタイルC/Sアプリ作成術

2012年11月27日

SOAPサーバーの実装


SOAPサーバーについては、スタンドアロンVCLアプリを採用するにしろ、CGIアプリを採用するにしろ、今のところDelphiで作れば、Windowsサーバーを使用することになる。
Windowsサーバーを直接インターネットに公開するのはちょっと。。という場合は以下の方法を使うとよい(高橋さん@エンバカに教えてもらった)。
Linuxサーバーのリバースプロキシ機能を使い、Linuxサーバーをインターネットのフロントに置き、Windowsサーバーをその後ろに隠す方法がある。

設定は、Httpd.confに下記のように2行書くだけ
ProxyPass /foo http://foo.example.com/bar
ProxyPassReverse /foo http://foo.example.com/bar

詳細は、”Apache proxyPass”などで検索。
posted by しんくそふと at 14:24| Comment(0) | TrackBack(0) | 3層スタイルC/Sアプリ作成術

2013年02月28日

SOAP アプリケーション ウィザードの使い方


SOAP アプリケーション ウィザードの使い方の場所です。

DelphiXE3
ms-help://embarcadero.rs_xe3/rad/SOAP_アプリケーション_ウィザードの使い方.html
posted by しんくそふと at 17:17| Comment(0) | TrackBack(0) | 3層スタイルC/Sアプリ作成術