アプリ版:「スタンプのみでお礼する」機能のリリースについて

 mitsu1112と申します。どうぞよろしくお願いします。
 現在、ASP.NET2.0にて開発を行っていますが、
何分プログラミング自体初心者であるため、
わからないことだらけです。
 ログイン機能を備えた社員スケジュールを
管理するサーバを構築したいのですが、
私に与えられた任務は、
 「画面の遷移方法について調べ上げ、こういったときに
 こういった方法を使って遷移する」ということを判断する
というものです。
 2.0で行える遷移方法は4つあると認識し、
それぞれの特徴もおおよそとらえていると思いますが、
どの場面でどの方法を使うかという明確な使い分けが
まだ自分にはわかりかねます。
 そこで質問したいのが、こういった使い分けは
どうしたらよいのか、そして自分で勉強するなら
どういったところを調べたらよいでしょうか。
 長くなってすいません。ご回答よろしくお願いします。

A 回答 (2件)

Redirectで想定外のページに行くことは考えにくいです。


Redirectの行き先をクライアントから任意入力させれば別ですが。

Cross-Page Postingは実装の仕方によります。
とくに、一つのページに対して複数ページからのデータ引き継ぎを伴う遷移があった場合、データの引き継ぎ方を間違えると大変になります。
データフローが煩雑になるっていうのが悪かったかな?ワークフロー上のデータ引き継ぎ部分が煩雑になります。入力値の検証が混じるととくに。
内部挙動が複雑なので、通常の業務アプリケーションでは使われません。ポストしたときのエラー処理がない場合もしくはブラウザ側でのみ入力チェックが完了する場合は、使用してもかまいません。
また、一つのページに複数の遷移元がない場合がいいでしょう。

Server.Transferを使うと、遷移先ページのURLをブラウザが認識しません。リンクはどうなりますか?
と、いうことは、階層構造にかかわらず、ブラウザがアクセスするページを一元化する必要があるということです。つまり、フロントコントローラとよばれる、すべてのページのアクセスで最初に必ず通る共通の部分を実装する場合と相性がいいのです。大規模なサイト向けです。
※ Transferでこんな引き継ぎもあるよ。こまってもこれで何とかなります。
(1)value = Request.Form["TextBox1"]; // 強引にPOSTの値をとる
(2)this.Context.Items["Name1"] = this.TextBox1.Text; // コンテキストをつかう。
value = (string)this.Context["Name1"];
※Transferはアクセス制御をかけたページにも行くことができるようになる場合があるので注意。


ページ数が一桁程度なら、どの方法をとっても大丈夫です。
困ってもすぐに手入れできるからです。
サンプルページを二つ作って、実感してみるのが先決かもしれません。


こういうドキュメントはなかなか見ません。だから開発チームによってまったく方法が違うと思います。いちばんたくさん見たのは、Hashtableによる受け渡し+RedirectもしくはTransferです。
とりあえずエンタープライズのWEBページ設計の指針になるページを書いておきます。
参考:
http://www.microsoft.com/japan/msdn/practices/ty …
    • good
    • 0
この回答へのお礼

 ご回答に対しての返事が遅れてしまい申し訳ありません。
  
 本日、話し合いの結果、Redirectを使って画面遷移を行うことになりました。せっかくご意見していただいたのに、私の理解不足からTransfer独特のメリットやCross-Page Postingのデメリットなどをうまく説明出来ませんでした。Xavalさんからいただいたご回答を参考に、遷移について更に理解を深めたいと思います。

 次の課題としては値の受け渡しや状態の管理といったものが考えられます。

 もしよろしければ、このようなことに関してもまた適切なご回答をいただけたら幸いと思います。

お礼日時:2006/12/06 01:12

画面の遷移はフレームワークを使って1種類に統一したほうがいいと思います。


簡単にいえば、Pageクラスを継承したベースページにそれを実装してもいいです。

種類ですが、クロスポストバックは意外と変更に強くないですし(実装によってデータフローが複雑になることがある)、Server.Transferはコマンドパターンによる実装が相性が合います(社員スケジュール程度ではつかいません)。
ここはResponse.Redirect + ハッシュテーブルの引数をセッションを介して持ちまわる、一般的な方法でいいでしょう。

ベースページクラス内で、パラメータ付の遷移を行ったときに、遷移イベントが発生するようにしたら、柔軟に実装できます。
たとえば
Page.PageTransfer("xxx.aspx",hash);
が実行されると、遷移先ページでは
void OnPageTransfered(TransferEventArgs e){ .. }
が発生するとか。

引数のインスタンスは都度、破棄してください。
巨大なデータが増え続けると厄介です。
    • good
    • 0
この回答へのお礼

 ご回答ありがとうございます。

 私の知識不足のために重ねてお聞きしたいのですが、
ご回答いただいたRedirectを使って遷移する方法を
とったときのセキュリティの問題はどうなるのでしょうか。

 セキュリティと言っても、かなり漠然としていますが、
URL直接指定による想定外のページ遷移など。ちなみに、
社員データはデータベースに保存と考えています。

 Cross-Page Postingは実装し、もし何か変更箇所があったときに融通が利かず、データーフローが発生する場合がある。
という認識でよろしいでしょうか。
 Server.Transferを使わない理由はよくわかりません。
 そして、Redirectですが、もう少し学習して、なぜこの方法を選択したのかを自分なりにきちんと言えるようになりたいと思っています。それには何か参考になるサイトなどはご存じないでしょうか。
 
 重ね重ね申し訳ありませんが、ご回答いただけたらと思います。
 どうぞよろしくお願いします。
 

お礼日時:2006/12/05 05:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!