3

私の asp.net プロジェクトは、3 層アーキテクチャに基づいています。

(データ アクセス層) DAL - (クラス ライブラリ)

    private static string connString ="";

    private static OracleConnection conn;

    public static OracleConnection OpenConn()
    {
        if (conn==null)
        {
            conn = new OracleConnection(connString);
        }
        if (conn.State != ConnectionState.Open)
        {
            conn.Open();
        }

        return conn;
    }

    public static DataTable Select(string query)
    {
        DataTable dt = new DataTable();
        OracleDataAdapter da = new OracleDataAdapter(query, OpenConn());
        da.Fill(dt);
        return dt;
    }

    public static void Execute(string query)
    {
        OracleCommand cmd = new OracleCommand(query, OpenConn());
        cmd.ExecuteNonQuery();
    } 

すべてのクエリを (ビジネス ロジック層) BLL クラスに入れました (すべての BLL クラスは別のクラス ライブラリ プロジェクトにあります)

例: EmployeeBLL

public static class EmployeeBLL
{
    public static DataTable Employees()
    {
       DataTable dt = new DataTable();
        string q = string.Format("select * from employees");
        dt = OraDAL.Select(q);
        return dt;
    }

    public static DataTable AddEmployee(string name)
    {
        DataTable dt = new DataTable();
        string q = string.Format("INSERT INTO employees (ename) VALUES('{0}')", name);
        dt = OraDAL.Select(q);
        return dt;
    }
}

SQL クエリが BLL で構築されている 3 層アーキテクチャに関するブログ記事をいくつか見たことがあります。そのため、SQL クエリを BLL に保持するプロジェクトを開発しましたが、今はそれらを DAL に移行する必要があると感じています。

だから私の質問は

  1. SQL クエリを BLL に保持しても問題ありませんか、それとも DAL に移動する必要がありますか?
  2. レイヤー間でデータを移動するためにデータテーブルを使用しても問題ありませんか、代わりに DTO を使用する必要がありますか?
4

3 に答える 3

3

NHibernate や Entity Framework 4+ などの ORM を確認する必要がありますが、Oracle NHibernate を使用しているため、IMO の方が優れています。

ORM は基本的に DAL を表し、現在マッピングしているデータベースの方言で SELECT、INSERT、UPDATE、および DELETE ステートメントを作成する責任を負います。

テーブルではなくドメイン モデルでクエリを実行できます。そして、それがあなたがしたいことです。データベースを抽象化するため、将来的に新しいマッピングを作成し、ドメイン オブジェクトを MySQL にマップすることができます。または、メモリ内データベースで追加のマッピングを実行して、高速な統合テストを実行できるようにします。

NHibernate (またはその他の ORM) を学習することは投資ですが、将来 .NET および RDBMS を使用する場合は、時間をかける価値があります。

于 2013-03-12T12:35:39.437 に答える
3
Is it okay to keep sql queries in BLL or I should move them to DAL?

大丈夫ですが、それが正しいことだとは思いません。それらが属する DAL に配置します。

Is it okay to use datatables for moving data between layers or I should use DTO's instead?

私は DTO を使用する方が好きで、これが正しい方法だと思いますが、DataTable を使用することもできます。

于 2013-03-12T12:27:39.750 に答える
3

アプリケーションをレイヤーに分割する利点は、データ リポジトリを変更する必要が生じた場合でも、最小限の労力で変更できることです。さらに、モックなどを使用してオブジェクトを分離してテストできます。

ビジネス オブジェクトに SQL クエリなどをハード ワイヤリングし始める場合、たとえば、オラクルの代わりに SQL に移行することは、ビジネス レイヤーとデータ レイヤー内のオブジェクトをリファクタリングすることを意味する可能性があります。

個人的には、ビジネス オブジェクトがデータ テーブルを参照する必要はないと思います。より良いアプローチは、データ層とビジネス層の両方が参照するオブジェクト (またはインターフェース) を共有することです。

于 2013-03-12T12:28:02.183 に答える