わんくま同盟 大阪勉強会 #1

皆さんの疑問に、勝手に答えます。
by 中博俊(大阪)
わんくま同盟 大阪#2 & 東京#1 合同勉強会
DB
Q.O/Rマッピング
DotNetでDBアクセスを考えた場合O/Rマッピン
グ手法を使った方が良いか、ADO.NET自体を
O/Rマッピングされた物として考えて使った方が良
いか、迷っています。
私的には、O/Rマッピング用のクラスを用意して、
基本的なDBへのアクセスはO/Rマッピングクラス
を通した方が開発効率とメンテナンスは向上すると
思っています。どうでしょうか?
わんくま同盟 大阪#2 & 東京#1 合同勉強会
DB
A.O/RはOOとしては理想的ですよね
理想的というのはえてして大変なものです。
ADO.NET 2.0では最強の道具であるTableAdapterとデータバインド
があります。
これらを使わないでやっていく価値があるかどうかの見極めをしませ
んか?
O/Rのデメリットはデータストアの軽視です。SQL Serverなどに対して
単純なSelect文だけで本当にシステムは作成できますか?
本当にデータベースサーバは差し替え可能なのでしょうか?トランザ
クション、ロック様々な面で設計思想が違います。
パフォーマンスは出せますか?
オブジェクト側の構造変更と、DBの構造変更をうまく調停できます
か?
見極めを行うべきポイントはかなりのポイントです。
よく検討する必要があると思います。
わんくま同盟 大阪#2 & 東京#1 合同勉強会
DB
Q. .NET+SQLServer
仕事柄、業務系アプリでの.NET+SQLServerの
実装方法でベストプラクティスみたいなのがあれば、取り
上げていただけると、とてもうれしいです。
ちょっと欲張りでしょうか....
A.えムナウさんと、囚人さんのセッションで・・・
おそらく語られたようにTableAdapter+ストアドプロシー
ジャによる実装と、トランザクションをストアド内で管理する
のが一番簡単です。
とくにロックがかかってしまうトランザクションは1秒でも速
く完結させるべきで、出来るだけSQLサーバ内で解決させ
てしまいましょう。
わんくま同盟 大阪#2 & 東京#1 合同勉強会
DB
Q. Viewやストアドの管理は大変です
最近サーバー上のVIEWやストアドを、技術的に
便利な方法で構成管理(履歴などを)する方法はな
いものかと模索中です。勉強会でそのようなネタが
あれば幸いです。
A.大変ですね
300や500のストアドの管理は大変です。
命名法だけでの管理しかないので何とかならない
ものかと私も思います。
わんくま同盟 大阪#2 & 東京#1 合同勉強会
DB
Q. 接続文字列を動的に変更したい
型付TableApdaperを使用する際で、接続先が
動的に変更しなければならない場合は、どうする
のがベストかを聞きたいです。
今は、TableAdapterクラス毎にPartialクラスを定
義して接続文字列を変更できるようにして、config
ファイル内の複数の接続文字列をそのつど設定し
ています・・・かなりの手間がかかっています・・・・
A. それしかなさそうです。
TableAdapterはそのままでデータアクセス層とし
て公開すべきでない局面が多いです。
わんくま同盟 大阪#2 & 東京#1 合同勉強会
DB
public static スレッド一件取得Row GetData(int スレッドID)
{
~~~~入力チェックを行う~~~~~
using (スレッド一件取得TableAdapter ta = new スレッド一件取得TableAdapter())
{
~~~~コネクションを差し替える~~~~~
using (データセット.スレッド一件取得DataTable table = ta.GetData(スレッドID,
ユーザID))
{
if (table.Rows.Count > 0)
{
return (データセット.スレッド一件取得Row)table.Rows[0];
}
else
{
return null;
}
わんくま同盟 大阪#2 & 東京#1 合同勉強会
DB
•ストアドプロシージャの場合無条件にnullも受け入れてしまうた
めにint?などになってしまう。
– 自前のパラメータならintにするだけ
•1行しか取得しない場合にはDataRowを取得したい
– 先ほどのように抜き出せばOK
•List<T>に詰め替えて取得したい
– 先ほどのように抜き出せばOK
•コネクションを切り替えたい
– this._connection.ConnectionString = global::ConsoleApplication1.
– Properties.Settings.Default.bbs_testConnectionString;
•ストアドプロシージャの戻り値を取得したい
– int? ret = (int?)com.Parameters["@RETURN_VALUE"].Value;
→積極的にpartialを使いましょう。
わんくま同盟 大阪#2 & 東京#1 合同勉強会
オープンソース
Q. どんなオープンソースが?
Javaで業務システムを構築する際、オープンソー
スなフレームワークを組み合わせることが多いの
ですが、.NETではどんなオープンソースがよく使
われているのか興味ありますね。ネット上の情報も
Javaに較べて少なめな気がするので、実際に利用
したことがある人のお話などありましたらぜひ聴い
てみたいです。
わんくま同盟 大阪#2 & 東京#1 合同勉強会
オープンソース
A. log4netやNunitやEnterprise Librareyとか
が有名でしょうか
おそらくJava + apache + tomcat + JSP + struts
+ ant + log4jとか、hibernateやらSeasar2だとか
を想定されているのでしょうが、それらに比べると
確かに影は薄いかもしれません。
ただそれらが無いとプログラムがほとんど組めな
い環境と、.NETでは標準装備されているため必要
性が高くないという違いが有るでしょう。
謹製中心と、オープンソース中心と特徴があって
いいんじゃないでしょうか。
わんくま同盟 大阪#2 & 東京#1 合同勉強会
言語
Q.C# の Generics で、できること。
C++ と C# の Generics(Template)の違いにより、どのよ
うな誤差が生じるか? C# でタイプリスト等の実現は不可
能か?(typedef)
A. GenericsとTemplateは根本的に違う技術です。
Templateは巨大なソース生成機構として、Genericsはタ
イプセーフなジェネリックプログラムとして。
事実STL/CLRというSTLをCLR上で実現するプロジェクト
もOrcas向けに動いていますし、C++/CLIではTemplateが
そのまま利用することが可能です。
誤差ではなくありのままを受け入れませんか?
わんくま同盟 大阪#2 & 東京#1 合同勉強会
言語
Q.C# の今後
C# は今後どの程度の勢いで普及していくか?
VB(VB.NET) に取ってかわってくるか?
A.C#はC#, VBはVB・・・
.NETの普及は進んでいくでしょう。
そのv1.x時代には私も含むC系を得意とする技術者が先
導している感じがありましたが、今後はVBも巻き返しそうで
す。
事実掲示板などでもVBの話題が増えているように感じま
す。
案件としてはVBをメインとして、共通部品をC#やC++でと
いった利用が増えるような気もします。
ASPがVBSであったので、ASP.NETではVBという感じは
しますね。
わんくま同盟 大阪#2 & 東京#1 合同勉強会