- PR -

SubやFunctionのコード再利用の方法について

投稿者投稿内容
Dr.Mancini
常連さん
会議室デビュー日: 2003/01/23
投稿数: 35
投稿日時: 2005-03-09 09:55
お世話になります。

ASP.NETで、SubやFunction等のプロシージャが書かれたコードを、
複数のページで再利用したいと思います。

旧ASPの頃は、
<!--#include virtual="/include/XXX.asp" -->
等によって記述していました。
ASP.NETでもincludeは使えますが、パフォーマンスが悪くなるらしいので、
ASP.NETに適した方法で出来ればと思っております。

自分なりに調べた上で、当初、
<% @Page Language="VB" Inherits="XXX" Src="XXX.aspx.vb" %>
といった、クラスの継承によって実現していたのですが、
複数のファイルを呼び出したい場合に困ってしまいました。
例えば、旧ASPであれば、下記のようなシーンをASP.NETで実現したいのです。
<!--#include virtual="/include/XXX.asp" -->
<!--#include virtual="/include/YYY.asp" -->
<!--#include virtual="/include/ZZZ.asp" -->

まだASP.NETを根本的な部分で理解できていないため基礎から学習中なのですが、
教えて頂ければ幸いです。

よろしくお願い申し上げます。


[ メッセージ編集済み 編集者: Dr.Mancini 編集日時 2005-03-09 09:55 ]
kanai
ベテラン
会議室デビュー日: 2004/09/13
投稿数: 98
投稿日時: 2005-03-09 12:53
「SubやFunction等のプロシージャが書かれたコード」を別にクラス化し、
各ページで必要に応じてインスタンス化して使用すればよいと思います。

ただ呼んで使用するだけならば、「クラスの継承」を使うべきではありません。
kanai
ベテラン
会議室デビュー日: 2004/09/13
投稿数: 98
投稿日時: 2005-03-09 13:06
コード:
まだASP.NETを根本的な部分で理解できていないため基礎から学習中なのですが、 
教えて頂ければ幸いです。



開発環境として何を使用しているのか分かりませんが、VS.NETを使用すると、
「コードビハインド」などASP.NETの新しい仕組みがよく分かります。

Visual Studio 2005のベータ版などで試してみてはいかがでしょうか?
(.NET 2.0になってしまいますが)
Fujiwo
常連さん
会議室デビュー日: 2002/02/19
投稿数: 20
投稿日時: 2005-03-09 14:47
ASP.NET というより、先ずは VB.NET での「クラス」の使い方を学ばれることをお勧めしたいと思います。
その上で、今回のケースでは Shared Sub や Shared Function を使われるのが向いているような気がします。

#「クラス」を使う意味、使い方のコツをつかむまでは、Shared Sub や Shared Function は、余りお薦めできません。
Dr.Mancini
常連さん
会議室デビュー日: 2003/01/23
投稿数: 35
投稿日時: 2005-03-09 16:04
皆様、ありがとうございました。
現状では何が良い方法か判断しかねる状況ですが、
もう少し勉強した方がよい事はわかりました。
ASPに比べると難しいんですね・・・。

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-03-09 20:53
 ASP.NETというより、オブジェクト指向が、ですね。

 オブジェクトをどのように扱いたいのか、それによって分けます。
 例えば、「入力文字列が、一定の書式に一致するかどうかを調べる」という処理が必要だとしましょう。フィールドAとフィールドBは、入力対象は違うのだけど、同じ書式で入力するので、1つのメソッドで処理したい。しかし、そのようなまとめ方は、お勧めしません。なぜなら、フィールドAとフィールドBで入力する対象が違うなら、後で変更が入って、異なる書式となるかもしれないからです。このとき、1つのメソッド内でIF文で処理を分けるのは最悪です。再利用などせずに、処理は分けておきます。

 例えば、入力された文字列の中に、SQL文として意味のある入力があるかどうか調べる処理が必要だとしましょう。複数の入力フィールドで、これをまとめることは重要です。SQL文として設定してある語彙に誤りがあった場合、1箇所の修正ですむからです。
 こういう場合、共通で使うためのクラスを作成し、そのクラスの静的メソッドを定義します。
コード:
Public Class CommonChecker

	Public Shared Function SQL(ByVal str As String) As Boolean
		' SQL文に挿入するとき、まずい文字はないか
	End Function

	Public Shared Function HTML(ByVal str As String) As Boolean
		' HTMLになったとき、まずい文字はないか
	End Function

End Class


 複数のプロジェクトから参照する必要がある場合、こういうクラスだけでプロジェクトを作ります。VisualStudio.NETでは、相互参照はさせられないので、必ず一方通行な参照になるように、プロジェクトにクラスを配置します。

 上記2つの例の違いは、何に依存するかです。「入力書式」は、検査対象に強く依存しています。しかし、「ある文字列が含まれているか」は、抜き出す文字列に依存しており、検査対象には依存しません。

 ASPに比べてASP.NETが難しいのではないのだけれど、まぁ、ベースが違っているから、移行期は難しいと感じるかな。逆に、慣れてしまうと「なんて便利なんだろう!!!」と感じるようになります。きっと。たぶん。。。


# 夜しか出てこられなくてすみません。
_________________
Dr.Mancini
常連さん
会議室デビュー日: 2003/01/23
投稿数: 35
投稿日時: 2005-03-10 10:29
お返事ありがとうございます。


> こういう場合、共通で使うためのクラスを作成し、
> そのクラスの静的メソッドを定義します。
>
クラスを作成する場合、変更の度にコンパイルする必要があるのでしょうか?
自分はASPの頃、その共通部分のコードも度々付け足すことがあったので、
できればコンパイルなしで実行できればと思います。
もし出来るのであれば、ページ先頭の
<% @import Namespace="xxxxx" %>
の部分の書き方が分からないので、可能であれば教えて頂ければ幸いです。

わからない事だらけで本当申し訳ないです。
早速今日の夕方に参考書籍を買おうと考えています。現在持っているASP.NETの本だけではオブジェクト指向を理解できそうにありません(泣)

P.S.
夜間の時間を割いていただき、ありがとうございます。
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2005-03-10 10:44
引用:

自分はASPの頃、その共通部分のコードも度々付け足すことがあったので、
できればコンパイルなしで実行できればと思います。

って、
引用:

旧ASPの頃は、
ASP.NETでもincludeは使えますが、パフォーマンスが悪くなるらしいので、
ASP.NETに適した方法で出来ればと思っております。

と矛盾したことが書いてありませんか?

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