仕事で色々勉強しないとなのでアスペクト指向の勉強がなかなか進みません。
そんな中、なんとか前回定義したインタフェースを実装してみました。
実装したインタフェースは、IPointcut、IAspect、IMethodInvocation の3つです。クラスはそれぞれ Pointcut、Aspect、MethodInvocation としました。
今後重要になるクラスとインタフェースは次のようになると思います。
Ads
仕事で色々勉強しないとなのでアスペクト指向の勉強がなかなか進みません。
そんな中、なんとか前回定義したインタフェースを実装してみました。
実装したインタフェースは、IPointcut、IAspect、IMethodInvocation の3つです。クラスはそれぞれ Pointcut、Aspect、MethodInvocation としました。
今後重要になるクラスとインタフェースは次のようになると思います。
AOP を理解するには、実際にプログラミングした方が理解し易いと思うので、AOPアライアンスの Javadoc AOP Alliance specifications を元に、インタフェースを作成してみようと思います。が、その前にまず知っておきたいのは、VB.NET で処理の横取り(インターセプト)はどうすれば良いのか?です。
正直、全く思いつきません・・・
と言うより、そんなこと出来るの?って感じです。
あるクラスのあるメソッドを実行したときに、あたかもそのメソッドを実行してるかのごとく別の処理を割り込ますわけで・・・
SQL Server エージェントのジョブを実行したときに下記のようなエラーが発生してしまった。
「非システム管理者には、プロキシ アカウントを使用せずに CmdExec ジョブ ステップを実行する権限がありません
ステップは失敗しました。」
このエラーは、このジョブの所有者が、CmdExec を実行するための権限が無いときに発生します。
.NET の開発していて、作成したクラスやメソッドのヘルプファイルを作ることになったとしたら、Sandcastle で簡単に作成することができます。
しかも、MSDN のような API リファレンスが作成できます。
Sandcastle – Documentation Compiler for Managed Class Libraries – Home
私は、VB6 と C++、 Java の開発経験があります。
そんな私が VB.NET 開発をやってみて思ったのは、オブジェクト指向を知ってるかどうかでプログラミングが大きく違ってきてしまうということ。
もちろん C++ や Java にしてもオブジェクト指向を理解できてるかどうかで違ってくるわけですが、VB6 以前からの技術者はオブジェクト指向的な考え方が出来なくても今まで通りでなんとなく組めてしまうので、ロジック的にかなり無駄が多くなってるように感じます。
今まではプログラムを流れで組んできたわけで、オブジェクト、機能という見方でプログラムを組んできたわけではないから仕方ありません。
VB6 を VB.NET へコンバートツールを使ってコンバートするとほとんど VB6 のままで動いてしまいます。
VB6 の時はコピペロジックが多かったですし、Class はありましたがあまり使われず Bas を使ってるので、そのままではあとで修正に苦しみます。このままだと技術者によってあまりにもプログラミングに違いがあり過ぎてしまうので、せめてベース的な部分は同じにしたくなります。
そこでライブラリを使う事になります。
フリーで公開されているのを使っても良いのですが、私的にはあまりに高機能過ぎます。
VB6 以前の技術者が理解して使いこなすのにも時間が掛かりすぎる気がします。
それに業務内容的にもっと扱い易くしたいと思います。
色々考えた末、独自のライブラリを作る事にしました。
ライブラリを作る上で関数の集合体ではつまらないので、アスペクト指向も導入したいと思ってます。
アスペクト指向ってなんぞ?
って感じですが、ネット上で検索すれば詳細に説明されてますので、そちらを見た方が分かり易いと思います。
プログラミング経験があれば VB.NET でどのようにプログラミングしてけば良いのかになるので、実際にサンプルを実装していった方が早いかもしれません。
プログラミングしていく上では、AOPアライアンスを理解したほうが良いようです。
AOP に関してのインタフェースが定義されているのでこれに準じることが望ましいでしょうから。
Java のドキュメントですが、VB.NET に置き換えることはできます。
AOP Alliance
Javadoc AOP Alliance specifications
さらに全くのゼロからだと正直理解しきれません。
.NET で一番分かりやすそうなのは Spring.NET と S2Container.NET でした。
C# ですが参考に勉強していこうを思います。
とりあえず、AOP アライアンスからインタフェースを定義してみます。
DTS をコマンドから実行するときや、SQL Server エージェントのジョブで DTS を実行するときには、dtsrun コマンドを使います。
dtsrun コマンド実行時に引数としてサーバー名(インスタンス名)や、ユーザー名、パスワードを指定しますが、このままだとパスワードまで平文なので出来れば隠したいところです。
そんな時はコマンドの引数を暗号化してしまいます。
Visual Studio にはクラスのデザインをするためのエディタがあります。
ソリューションエクスプローラでプロジェクトなどを右クリックして「クラスダイアグラムで表示」って実行するとファイルが出力されます。これを視覚的なエディタとしてデザインできる機能です。
でもこのクラスダイアグラムってあまり実用的ではないですよね。
単純に箱が並んでるだけでクラス間の関連性が見え難くてクラス図としても使えません。
これをもう少し実用的にクラス間の関連を表示してくれたり扱いやすくしてくれるアドインが、「ModelingPowerToys for Visual Studio 2008」 です。
PowerToys for the Class Designer and Distributed System Designer
Visual Studio で単体テストするなら入れておきたいアドインは TestDriven.Net です。
このアドインは NUnit というクラスやメソッドの単体テストを行うためのツールを Visual Studio 上で実行出来るようにするためのアドインです。
TestDriven.Net > Home
NUnit – Home
TestDriven.Net は、Enterprise、Professional、Personal と3バージョンあり、Personal だけは無料となってますが、学生やオープンソース開発、お試し目的で使ってねとあるので、仕事で使うには購入すべきですね。
クエリ結果の先頭から指定した行セットだけを返したい場合は TOP を使用しますが、 通常は下記のように発行しても問題ありません。
SELECT TOP 15 * FROM tbHoge
処理上、取得件数を変数で指定したい時は、下記の様になると思いますが、エラーとなります。
SELECT TOP @Count * FROM tbHoge
正しくは下記の通り、括弧で変数を括ります。
SELECT TOP (@Count) * FROM tbHoge
SQLServer 2005 以降は括弧で括る事を必要としています。
括弧無しは下位互換性のため、実行可能になってるとのこと。
SQLServer2000 以降ではビューにインデックスが付けられます。インデックス付きビューと呼ぶそうです。
インデックスを作成するには色々と条件があり、本当にインデックスを作成した方がパフォーマンスが上がるのかよく検討した方が良いようですが、インデックス付きビューが利用出来そうならパフォーマンス的には良くなるのでは?と思うので、もしパフォーマンスに不満がある時は、挑戦してみた方が良いかと思います。