- - PR -
ビジネスロジックについて
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-07-10 03:43
$_SERVERはサーバ側のデータなので、ビジネスロジック層で直接取得しても
意味的に問題ないと思いますよ。 本来はプレゼンテーション層から通知するデータだけど よく使うので、サーバ側で参照できるように自動的に通知されている と思えばよいかと。 | ||||||||
|
投稿日時: 2005-07-10 17:37
ほげたさんありがとうございます。
>プレゼンテーション層:ユーザとのインタラクションを担当し、 >ユーザ操作をビジネスロジック層に伝達、 >ビジネスロジック層の結果等をユーザに提示(表示など) の箇所からphpで掲示板を組もうとした時、 (javaからphpに話が飛んでスミマセン) 掲示板の画面が有った場合に、ボタンを押した時に走るプログラムは、 プレゼンテーション層では入力されたかどうかを判定し、 そして処理をビジネスロジック層に渡すという感じで宜しいでしょうか? php4の話になっていますので、分かりにくいかと思いますが、 もしよろしければアドバイスください。 -----------------プレゼンテーション層のプログラム-------------------- if($_REQUEST["submit"] != ""){ //ビジネスロジック層のプログラム(関数?) check();//入力チェック //データを取得(ビジネスロジック層?インテグレーション層?) $data = dataGet(); //表示プログラム(プレゼンテーション層のプログラムなので、ここに記述) 〜 〜 } --------------------------------------------------------- プレゼンテーション層のファイルにいろいろと関数が入っているような感じになっています。 自分ではこれが良いのかどうか?分からないので、何かアドバイスを貰えたら光栄です。 (php4では難しいものなのでしょうか?) 後、少し訳が分からなくなってきているのですが、 〜層というのと、 MVCは、同じようなものなのでしょうか? 言い方が違うだけで似ているものなのでしょうか? M=ビジネスロジック層 V=プレゼンテーション層 C=プレゼンテーション層? これについてもアドバイスを頂けたら光栄です。 | ||||||||
|
投稿日時: 2005-07-11 01:55
プレゼンテーション層では、ユーザ入力を受け付け、入力チェックを行い、
論理的な操作としてビジネスロジックに依頼します。 簡単なイメージでは、ユーザがどのボタンをクリックしたか、 どんなパラメータを入力したか、という情報から ログインする、○○データを取得する、などの意味的な操作に変換します。 新幹線の座席予約端末みたいなもんだと考えるとわかりやすいかもしれません。 端末はユーザとのインタラクションを担当し、 端末だけで処理できるものは処理するかもしれませんが 最終的な座席予約はすべてネットワーク経由で中央に処理を依頼します。 ですので、挙げられている例のうち入力チェック部分の内容により 本来置くべき場所は異なります。 フォーマットや入力数などの構文的なチェックの場合はプレゼンテーション層 入力値の意味を必要とするチェックの場合はビジネスロジック層 基本はそういうことですが、実際には通信トラフィックを考えて ある程度の意味的なチェックもプレゼンテーション層に担当させたり パフォーマンスやキャッシュの効果を狙ってビジネスロジック層で プレゼンテーション層がやるべき表示データの作成をさせたりということはあります。 最終的には、何を実現させる必要があり、将来のために どの部分の拡張性・保守性を重要視するかということで変わってきます。 勉強のためということですので、いったん納得いくまで厳密な切り分けをしてみて その後でパフォーマンスなどのファクタによって、どこをどう変えるといいか いろいろ検討してみるとよいでしょう。 レイヤとMVCをマッピングするなら、こんな感じでしょうか。 V:プレゼンテーション層(どう見せるか) C:ビジネスロジック層(何ができるか) M:データ層(何を保持するか) レイヤとMVCの考え方は似ていますが違います。 レイヤの場合は隣接するレイヤ以外とは結合しません。 通信のOSI階層モデルを思い出してもらえればイメージがわくかと思います。 MVCの場合は、お互いに結合しているV/Cが、Mを参照します。 また、レイヤはアーキテクチャの概念で、MVCはどちらかというとレイヤ内での 構造を考えた設計レベルに近い考え方と捉えています。 #ここらへんは異論がありそうですが・・・ | ||||||||
|
投稿日時: 2005-07-19 00:07
返事が遅くなり本当にスミマセン。
ほげたさん、ありがとうございました。 「フォーマットや入力数などの構文的なチェックの場合はプレゼンテーション層 入力値の意味を必要とするチェックの場合はビジネスロジック層」 という所が凄く分かりやすく、 少し頭がスッキリしたような感じです。 ありがとうございました。 今、プログラムを作成中です。 参考にさしていただきます。 本当にお世話になりました。 | ||||||||
|
投稿日時: 2005-07-23 15:33
ほげたさんの「厳密な切り分け」という言葉があるのですが、
この切り分けというのは、どういう状態が切り分けられているという事なのでしょうか? 例えば、 //プレゼンテーション層のクラス public class present{ //メソッド public static void hogeGet(){ BL.a();//ビジネスロジック層のメソッド BL.b();//ビジネスロジック層のメソッド } } このような感じでプレゼンテーション層のクラスがビジネスロジック層のメソッドを呼ぶのは、 これは切り離されている状態という事なのでしょうか? 私としては、始めはこのように思っていました↓ //コントロール層??(いろいろと呼び出す役割)のクラス public class present{ //メソッド public static void hogeGet(){ PR.a();//プレゼンテーション層のメソッド BL.b();//ビジネスロジック層のメソッド } } どこかのクラスで、いろいろな層を呼ぶものだと勝手に思い込んでいました。 これだと一応、層が分かれているものなのだと・・・ オブジェクト指向というものもハッキリと分かっているのか?と質問をされると、 凄く悩んでしまうレベルなので、 層をきっちり分けるというプログラムの書き方が少し分からない状態です。 プログラムを実際書こうとするとどういう風に書くのが一番良いのでしょうか? 知識があまり無くて、検討違いの事を言っているかもしれませんが、よろしくお願いします。 | ||||||||
|
投稿日時: 2005-07-23 20:11
「他のプレゼンテーションプログラム(例えばCUI)から既存のビジネスロジックプログラムが使用出来る」事が「厳密に切り分け」られている状態かと。
複数のプレゼンテーションプログラムがある事を意識して、プログラムを書いてみましょう。 例えば、ビジネスロジックプログラムのテストを作成した時に、テストコードにプレゼンテーションプログラムが入り込まなければ、「層が分かれている」と言えます。 (これだけでは不十分ですが、取りあえずは) |