2008年6月30日月曜日

[.NET]Server.Transfer

レガシーなASP(ASP.NETではない)ASPでは、Server.TransferするときにURLにクエリーをつけるとエラーになります。ASP.NETでもそのつもりだったんですが、なんと、ASP.NETの場合はクエリーがつけれるのです。ちょっとびっくりです。

でためしに、ASP.NET→ASPへServer.Transferができるかを実験してみました。さすがにコレはエラーになりました。

画面遷移をコントロールするとき、データの取り回し方法(スコープ)として、Session/URLクエリー/Cookieの3つを思いつきます。しかし、Server.TransferでURLクエリーが使えるとなると、データの取り回し方法の選択肢が増えますねぇ。

2008年6月27日金曜日

[他]カバレッジ計測の効果

私が参加しているプロジェクトでは、Javaでも.NETでも大体の場合、DAOやBCは基本的にUnitテストを組みます。Javaの場合JUnitであり、.NETの場合はnUnitになります。
これがあると、仕様変更やバグの修正を行った後の確認がすごく楽であり安心ができます。

最近かかわったプロジェクトでは、これに加えカバレッジの計測を実施する必要があり、とあるツールを使って実測してみました。

ユニットテストといっても、テストを書く前には、要因分析を行いパターンを導き出し、それに従ったテストコートを書きます。しかしカバレッジ計測をしてみると、C0のカバー率が80%程度でした。
計測する前90%は行っており、ほぼ100%であろうと予測していたので、意外な結果と気落ちしました。逆に考えると要因分析に問題がある。と考える事ができるからです。

今回、カバレッジ計測のツールをお借りして利用しました。そのため、今後は何かしらツールを利用する必要があります。.NET系の場合であれば、VSの高いエディションならカバレッジ計測ができるツールがあるのはわかっていますが、値段が。。。

ということで調べてみると、NCoverなるツールがあります。有料化されたとのうわさがありますが、nUnitと組み合わせることができるようです。このツールではC0の計測ができるようです。

今回、結果的にC0/C1をほぼ100%まで引き上げました。その結果安心だけではなく自信が持てるようになりました。ちょっと手間はかかると思いますが、やる価値はある。と感じました。

2008年6月22日日曜日

[.NET]ASP.NETの基本

VS.NETを使っていると気づかない(忘れてしまう)のですが、ASP.NETはソースを置いておくと自動的にコンパイルし実行します。そのあたりは基本的にレガシーなASPと似た動作ですね。

ASP.NETでは、初回動作またはタイムスタンプが変わったときににコンパイルされ、アセンブリ(DLL)を生成します。この挙動はJavaのJSPの動作ににています。
今はExpress Editionがあるので、環境が用意できないことはまれだと思いますが、コンパイルしたモジュールを入れるのが困難な環境であったり、ちょっと変更してはためしたい場合、自動的にコンパイルする方法は便利です。

実装例はこんなかんじ。この例では、入力されたテキストボックスの値の和を算出します。

<%@ Page Language="vb" %>
<script runat="server">
    Sub Page_Load
    End Sub

    Sub btnCalc_Click(ByVal sender As System.ObjectByVal e As System.EventArgs)
    
        lblResult.Text = (Convert.ToInt32(f1.Text) + Convert.ToInt32(f2.Text)).ToString()

    End Sub
</script>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
    <HEAD>
        <title>Test</title>
        <META http-equiv="Content-Type" content="text/html; charset=shift_jis">
    </HEAD>
    <body>
        ■Test
        <hr>
        <form id="Form1" method="post" runat="server">
            <asp:TextBox id="f1" runat="server" text="2"/>+
            <asp:TextBox id="f2" runat="server" text="1"/>=
            <asp:Label id="lblResult" runat="server" text="hoge"/>
            <br/><asp:button id="btnCalc" runat="server" Text="計算" OnClick="btnCalc_Click" />
        </form>
    </body>
</HTML>

[.NET]インテリセンスの候補に表示しない方法

VS2005や2008では、開発効率を高める機能として、エディタにインテリセンスの機能が搭載されています。
エディタに「.」を入力したときまたは、コントロール+スペースキーで表示される入力候補の一覧ですね。

しかし、この一覧に出したくないと思うことがあります。ライブラリーとして提供する時に、隠しておきたいメソッドがある場合などです。そういう場合、メソッド・クラス・プロパティにアトリビュートをつける事により非表示になります。EditorBrowsableAttribute クラス (System.ComponentModel)と、~ 10 行でズバリ!! - 番外編 ~ 自分流のコントールを作っちゃおう ~が参考になります。で、コードはこんな感じ


[EditorBrowsable(EditorBrowsableState.Never)]
[Browsable(false)]
public string hogehoge
{
get { return "hoge"; }
set { }
}


[EditorBrowsable(EditorBrowsableState.Never)]
public string Bar()
{
return "bar";
}


しかし、C#の場合、

  • 同一プロジェクト内では表示されてしまう
  • 別プロジェクトでもプロジェクト参照すると表示される


なんです。つまるところ、アセンブリ参照ではないとダメということらしい。ということです。これはC#2008EEで試した結果です。
VB.NETではこのような制限はないようです。。。なぜ異なる仕様なのかは、よくわかりませんね。

2008年6月18日水曜日

[他]10 の必須ツール

10 の必須ツール 全ての開発者がすぐにダウンロードすべき Visual Studio アドイン By James Avery」ですが、リンクが切れています。ということで備忘録としてメモ。

  1. TestDriven.NET テスト駆動開発補助

  2. GhostDoc XMLコメント作成補助

  3. Smart Paster 文字列入力補

  4. CodeKeep ソースコード再利用補助

  5. PInvoke.NET P/Invoke署名作成補助

  6. VSWindowManager PowerToy - VisualStudioのウィンドウレイアウト保存

  7. WSContractFirst WSDLファイル作成補助

  8. VSMouseBindings 多機能マウスのボタンへの機能割り当て

  9. CopySourceAsHTML HTML形式でソースコードをコピー

  10. Cache Visualizer ASP.NETキャッシュ情報表示

どれもスバラシイツールです。この中で、5,9を試したことがあります。VS.NET2003では動作しますが、VS2005では残念ながら動作しませんでした。


Blog書くときに、9はすごく便利そうなんですが。。。

2008年6月13日金曜日

[他]MSDNライブラリの参照順

VS2005からだと思うのですが、ヘルプ(MSDN)が必ずNETを見に行ってしまい、その結果表示するまでにストレスを感じていました。
実は、これは設定で変更することができるということがわかりました。

ヘルプを開いた後、
 [ツール][オプション]→ヘルプ→オンライン
で、どの順でHELPを検索するかを変更することができます。

VS2008の場合は、初めてHELPを開くときに確認のダイアログが出るようですね。

2008年6月9日月曜日

[他]ODP.NETのデバッグ・トレース機能

DBにアクセスするアプリケーションを調査する場合、そのアプリを動作させて発行しているSQLわかると、原因の調査がやりやすく、何が起こっているか調査するきっかけをつかむことができます。
SQLServerであればプロファイラーにてリアルタイムにトレースすることができます。

Oralceの場合、とあるテーブル(失念)に発行したSQLを格納していますがどの端末から出力したものかがわかりづらく、見やすいものでもありません。

で、今日別件で調査していると、ODP.NETに限りますが、OTNのサイトで ODP.NETのデバッグ・トレース機能の利用が紹介されていました。どんなSQLがトレースされるかは不明ですがこれは助かります。
レジストリの設定が必要ですが、今度やってみようと思いました。

2008年6月4日水曜日

[.NET]条件コンパイル(#IF)

C#では、定義の有無のよりコンパイルするかしないかを指定することができます。意外と知らない人がいたりします。
VS2008では、コンパイルが無効になる場合、コードがグレーで表示されますね。

コードは以下のような感じ。


#if DEBUG
            System.Diagnostics.Debug.WriteLine("デバッグモード");
#else
            System.Diagnostics.Debug.WriteLine("リリースモード");
#endif

2008年6月1日日曜日

[.NET]文字列からenum型の値を復元する

enumで定義した値をToString()すると、その定義名となります。デバッグなどでは便利な機能ですね。
さらに、定義名(文字列)から値に復元する方法があります。コードはこんな感じ。

enum TestEnum
{
    test01 = 0,
    test02,
    test03,
    test04,
}

TestEnum enm = TestEnum.test01;
System.Diagnostics.Debug.WriteLine("1.enm=" + enm);
enm = (TestEnum)Enum.Parse(typeof(TestEnum), "test03");
System.Diagnostics.Debug.WriteLine("2.enm=" + enm);


出力ウインドウには以下のように表示されます。

1.enm=test01
2.enm=test03