DOBON.NET DOBON.NETプログラミング掲示板過去ログ

データベース層とアプリケーション層の意味

環境/言語:[c#]
分類:[.NET]

c#を使い、windows formアプリを勉強をかねて業務で使えそうなアプリを作っています。

c#とAccessを利用しています。

button1に全てのコードを書き込んで、ボタンを押すとデータベースに接続してデータを読み込んだり書き込んだりしています。

private void button1_Click(object sender, EventArgs e)
{
//DBアクセス。データの書込など
}

このようなコードを書いていたのですが、こんなコードでいいのか心配になってきました。
そこで、ネットで調べるとプレゼンテーション層、データベース層、アプリケーション層で分けて書くのが良いと書いてあります。

これが厳密にどういった事がか理解できません。プレゼンテーション層はwindows formの場合、自動で作成されると思います。

残りのデータベース層というのはデータベースにアクセスする時は、データベースクラスを作って、そのクラス経由でDBアクセスする。

アプリケーション層はビジネスロジッククラスを作って、そこ経由でビジネスロジックを操作するという事なんでしょうか?

「層」とういのが「クラス」と置き換えていいものなのでしょうか?

ちなみに、あるサイトではボタン1つに全てのコードを書くのは最悪とありました・・・
■No32363に返信(wheelさんの記事)
> このようなコードを書いていたのですが、こんなコードでいいのか心配になってきました。
> そこで、ネットで調べるとプレゼンテーション層、データベース層、アプリケーション層で分けて書くのが良いと書いてあります。

この 3 つの言葉だと、

・ユーザが GUI 操作するクライアントの端末
・ビジネスロジックを実行するサーバ端末
・データベース用のサーバ端末

というのをイメージしますけどね > 私は
いわゆる “C/S システム” の「三層システム」「3Tier システム」ですね。

> これが厳密にどういった事がか理解できません。プレゼンテーション層はwindows formの場合、自動で作成されると思います。

MVC や PAC パターンのようなアーキテクチャの話と混同しているように見えますね。

よりコード寄りのアーキテクチャという意味でいうなら、.NET の Windows Form アプリケーションは、通常は Doc/View 形式のアーキテクチャですね。
もちろん工夫して PAC パターンのようなアーキテクチャにすることは可能です。

これを踏まえて、以下の引用の話を見ると、

> 残りのデータベース層というのはデータベースにアクセスする時は、データベースクラスを作って、そのクラス経由でDBアクセスする。
> アプリケーション層はビジネスロジッククラスを作って、そこ経由でビジネスロジックを操作するという事なんでしょうか?
> 「層」とういのが「クラス」と置き換えていいものなのでしょうか?

三層システムの層と、PAC パターンにおける層を混同しているように見えます。

> ちなみに、あるサイトではボタン1つに全てのコードを書くのは最悪とありました・・・

この “あるサイトの人” も混同しているように見えます。
あるいは、そのサイトで話していることは C/S における三層アーキテクチャの話であるのに、wheel さんが PAC パターンような理解をしてしまっているかですね。

というように、どこが原因かは定かではないですが、ふたつの次元の異なるアーキテクチャが GOTTA mix になっているように見えます。
■No32363に返信(wheelさんの記事)

Visual Studio のデータソース構成ウィザードをつかってウィザードベースでアプリケーション
を作っていくと、以下のページの図 2 の構造になります。

Part6 .NETで,データベース・プログラムはこう作る
TableAdapterクラスがカギを握る
http://itpro.nikkeibp.co.jp/article/COLUMN/20070320/265659/

つまり 3 層構造に分かれたコードを自動的に作ってくれます。

button1 では TableAdapter を操作して DataSet に DB からデータを取り込んだり(その結果
を DataGridView などのプレゼンテーション層に表示)、ユーザーが DataGridView などを通じ
て DataSet に書き込んだ追加・変更・削除などの情報を TableAdapter を操作して DB に反映
させることになるはずです。

さらに、button1 を自分で実装しなくても、その機能を持つ BindingNavigator をも自動生成
してくれます。具体的な方法は以下のページを見てください。SQL Server の例ですが Access
でも同様なことができます。(プロバイダの制約で、オートナンバーの処置がちょっと面倒で
すが)

10 行でズバリ !! 非接続型のデータ アクセス (ADO.NET) (C#)
http://code.msdn.microsoft.com/windowsdesktop/10-ADONET-C-cbfe7688

ウィザードは使わないで、自力でコードを書いてアプリを作りたいという場合でも、Visual
Studio が自動生成したコードは参考になると思いますので、一度ウィザードベースで作って
みることをお勧めします。


なお、自動生成されたコードでは不足の場合、自力でコードを書いて TableAdapter を拡張する
ことも可能です。詳しくは以下のページが参考になると思います(記事は ASP.NET ベースの
Web アプリの話ですが、TableAdapter の作り方は Windows Forms アプリでも同じです)

7.6 データコンポーネント機能による
データアクセスコンポーネントの開発
http://www.atmarkit.co.jp/fdotnet/bookpreview/vs2005webapp_07/vs2005webapp_07_03.html

DOBON.NET | プログラミング道 | プログラミング掲示板