- PR -

実例で学ぶASP.NETプログラミング(2)記事を読んで

1
投稿者投稿内容
b-max
常連さん
会議室デビュー日: 2003/02/05
投稿数: 26
投稿日時: 2003-02-05 22:45
いつも拝見させて頂いております。

実例で学ぶASP.NETプログラミング(2)を今夜読んだのですが
ImageButtonの画像を切り替えるのにコンポーネントクラスを追加して
そこにロジックを実装していますが、
単に同一aspx内に同様の処理を行うメソッドを追加
あるいは
クラスファイルを追加してそこで実装してクラスをインスタンス化してメソッドを呼び出し
のどちらでも同じように実現できると思いますが、コンポーネントクラスを追加してそこに
実装した理由を教えていただけないでしょうか?
コンポーネントクラスの利用方を理解していないので意味不明な質問を投げてるかもしれま
せんが、よろしくお願いいたします。

うりゅう
大ベテラン
会議室デビュー日: 2002/06/15
投稿数: 202
お住まい・勤務地: Hiroshima
投稿日時: 2003-02-06 02:18
ご質問にお答えしますー。

まず基本的にVS.NETを利用してASP.NETを作成していく場合、一つのことを実現
するのに多数の方法論があるのは、おわかり頂けるかと思います。
何が正しくて、何が間違っているかということはないとおもいますが、
何が開発効率が良くて、何が開発効率が悪いかということは主観の要素も
入りますが、存在することだと思います。

>単に同一aspx内に同様の処理を行うメソッドを追加
この場合、第一に今回のように複数の場所で同じメソッドを使う際に、
複数回コピーをしなければならず、ロジック修正などの際もそれぞれを直す必要があります。原則的にこれまでのASPでの場合にはそうせざるを得ない部分が多々ありましたが、こういった書き方は開発効率が落ちる源になりがちだと思われます。
第二に原稿内にも書きましたが、僕はASPXのそれぞれのファイルにはロジックを記述せず、ページ遷移とイベントに関する判定だけをなるべく書くべきだと思っています。これはデバックの際に遷移とロジックが明確に分離している方が、デバックしやすいと言うことと、単純に各ASPXファイルのソースが短い方が(できれば一画面以内)確実にデバックしやすいという理由です(笑)。

>クラスファイルを追加してそこで実装してクラスをインスタンス化してメソッドを呼び出し
ここで言われているクラスファイルというのが、コンポーネントクラスに当たると思います。もちろんコンポーネントクラスに限ったことではないのですが、次回DBに関する内容を掲載させて頂くときにもう少し細かく出てきますが、僕はロジックとDB周りのオブジェクトすべてを一つのコンポーネントクラスに納めて作っています。
このコンポーネントクラスはかなりのコード量が格納されるため、それこそ内容ごとにクラスを分けた方が良さそうなものですが、その場合ファイルが純粋にふえ、結果的に管理上手間が増えると考えています。

これはあくまで僕の主観上の開発効率の良さですので、読者の方のそれぞれのスタイルがあるのは一向にかまわないと思っていますが、僕の基本方針は
「なるべくコードを短く・なるべくファイルを少なく・なるべく論理順でコードを記述する(文章のように上から流れをもってプログラミングする)」
というポリシーです。
 

_________________
--------------------------------------
ネットビルド 小田原貴樹
odahara@netbuiuld.jp
--------------------------------------
b-max
常連さん
会議室デビュー日: 2003/02/05
投稿数: 26
投稿日時: 2003-02-06 21:53
うりゅう様
ご回答ありがとうございました。
うりゅう様がご回答くださった2つ目について書かせて頂きます。

私が指しているクラスファイルとは、プロジェクトを右クリック−追加−新しい項目の追加
で表示される新しい項目の追加ウィンドウ内でwebフォームとかwebサービスとか選択すると
思いますがその中の「クラス」であります。「コンポーネントクラス」というのもちゃんと
存在しており、この二つの使い分けについてお聞きしたかった次第であります。
#クラスファイル
#コンポーネントクラスファイル
上記二つは何か違いがあるのでしょうか?
同じクラスファイルのようですがクラス実装するするときはクラスファイルをするものと
認識してました。
実際に追加されたファイルの中身を見てみても自動生成された内容が異なってますね。
今回の場合、Webコントロールの属性を制御するWebコントロールアトリビューターみたいな
名前でクラスファイルに処理を実装することも可能かと思います。

うまく内容が伝わったかどうか心配ですが(文章力が弱くて・・・涙)
どうぞ、よろしくお願いいたします。
うりゅう
大ベテラン
会議室デビュー日: 2002/06/15
投稿数: 202
お住まい・勤務地: Hiroshima
投稿日時: 2003-02-06 22:51
僕も少し冗長な回答をしてしまったようですー。

>#クラスファイル
>#コンポーネントクラスファイル

「正当な言い方」ではありませんが、僕にとってこの二つの違いは、「ビジュアルデザイナが付いているか」どうかです。
前の回答にも書きましたとおり、次回DBに関するご説明をするときには、コンポーネントクラスのビジュアルデザイナを最大限利用して、GUI上でDB接続設定を行います。

>今回の場合、Webコントロールの属性を制御するWebコントロールアトリビューターみた
>いな名前でクラスファイルに処理を実装することも可能かと思います。

もちろん可能だと思います。DBに関する処理を行わない場合は、コンポーネントクラスでもクラスファイルでも同じだと思います。
ただ、前の回答にも書いたとおり「なるべくファイルを少なく」したい僕は、一つのコンポーネントクラスの中にすべてのロジックを含めているため、コンポーネントクラスを利用しているということです。

この辺りはもろに開発者の好みが出やすいと思いますので、適宜自分のスタイルに置き換えて頂けたらと思いますー。
_________________
--------------------------------------
ネットビルド 小田原貴樹
odahara@netbuiuld.jp
--------------------------------------
b-max
常連さん
会議室デビュー日: 2003/02/05
投稿数: 26
投稿日時: 2003-02-07 23:42
うりゅう様
ご回答ありがとうございました。

大変わかりやすい回答で、納得いたしました。
しっかりと自分なりの使い分けを身に付けたいと思っております。

また連載の中で扱って頂けたら是非扱って欲しいのですが
システムを財務システムと仮定した場合に
仕訳入力をDataGridで実現しようとした場合に初期表示の空の入力用DataGrid
5行3列が表示されていると仮定します。それぞれのカラムにはテンプレートを
使用します。
カラム1:TextBoxを配置(テキスト入力用)
カラム2:Labelを配置(勘定科目名称表示用)
カラム3:小画面呼び出しボタン(勘定科目検索子画面表示用)
とします。
要は、カラム3のボタン押下にて子画面が表示され勘定科目一覧が表示されるようにし
その中から該当の勘定科目を選択すると、子画面は自動終了(閉じる)し、かつ、
選択された勘定科目名称が親画面のDataGridの該当行のカラム2のLabel.Textに表示される
みたいなことをしたいと考えております。
さらなる発展は親画面のDataGridのカラム2をTextBoxにしそこに検索キーを入力後
カラム3のボタン押下にて表示される子画面には検索キーであるていど絞られた状態で
勘定科目が表示されるようになればBetterです。

連載で扱うかどうかは別としまして、これを実現させるためのキーとなる情報を
頂けたら幸いです。
本来の質問からはずれてしまい申し訳ないですが、よろしくお願いいたします。
#マナーとして別スレッドにした方がよかったかなぁ?
#でも連載の中で扱って欲しい気持ちはちょっと本気なので
#あえてここに書かせて頂きました。

1

スキルアップ/キャリアアップ(JOB@IT)