6

私はすでにうまく機能する階層化されたデータアクセス設計を持っています。しかし、それが最も適切な実装であるかどうかはわかりません。
BLL クラスまたはメソッドが静的であるべきか、インスタンスが 1 つしかない concreate クラスであるべきかを知りたいだけですか?
その間、BLL クラスをシリアル化して、そのような SOA 設計で使用する必要はありません。しかし、この機能が何をもたらすかはわかりません。
次のオプションを見てください。

  1. BLL クラスとメソッドは静的です
  2. BLL クラスは静的ではありませんが、そのメソッドは静的です
  3. BLL クラスは静的でもメソッドでもありません。アプリケーションは、メソッドにアクセスするために毎回 BLL クラスを作成する必要があります。
  4. BLL クラスは静的でもメソッドでもありません。ただし、各 BLL クラスのインスタンスは 1 つだけです。アプリケーションは、これらの静的インスタンスを使用して、BLL メソッドを使用します。

主にパフォーマンスとデザインで最も効率的なのはどれですか?

編集:

オプション1

public static class BllCustomer
{
    public static List<ModelCustomer> GetCustomers()
    {

    }
}

// usage
BllCustomer.GetCustomers();

オプション2

public class BllCustomer
{
    public static List<ModelCustomer> GetCustomers()
    {

    }
}

// usage
BllCustomer.GetCustomers();

オプション3

public class BllCustomer
{
    public List<ModelCustomer> GetCustomers()
    {

    }
}

// usage
BllCustomer bllCustomer = new BllCustomer();
bllCustomer.GetCustomers();

オプション4

public class BllCustomer
{
    public List<ModelCustomer> GetCustomer()
    {

    }
}

// usage
public static BllCustomer s_BllCustomer = new BllCustomer();
// whenever needed
s_BllCustomer.GetCustomer();
4

3 に答える 3

1

Domain / BusinessLogicLayer クラスをシリアライズするのは、通常、ドメイン層がビジネス ルールと複雑な処理ロジックを保持するため、少し奇妙に思えます。通常、DataTransformation / POCO クラスをシリアル化する必要があります。

静的または具体的なクラス/メソッドの間にはわずかなperformance違いがあります。メインのビジネス ロジックの静的クラスとメソッドは避けたいと思います。これらは、モックや単体テストが難しく、IoC コンテナーでは機能しない可能性があるためです。したがって、これを念頭に置いて、あなたが説明したようにオプション3をお勧めします。ここに投稿された非常に役立つ回答もいくつかあります。

于 2012-01-06T11:57:56.700 に答える
0

パフォーマンスと使いやすさのために、オプション2が最も理にかなっています。現在オプション2を使用していますが、問題は発生していません。それらのほとんどには、DALを呼び出す行と、log4netでログを記録する別の行が含まれています。それらのほとんどには、多くのビジネスロジックが含まれていません。

ただし、これはASP.NETで使用しています。

于 2012-01-24T16:33:15.433 に答える
0

私は個人的に、これらのテクニックの多くを使用してシステムを構築しました。結局、私は自分が賢すぎることに気付くべきでした。なぜなら、最も単純なテクニックが実際には最も柔軟だったからです。作業が少なくて「効率的」であると感じて静的にしようとする場合は、間違った理由でそれを行っています。

クラスまたはメソッドを静的にしないことをお勧めします。その理由は、DDD や依存性注入 (IoC) などのパターンが非常に価値があることに気付いたからです。たとえば、この BLL を使用する Web サイトまたはアプリケーション コードをどのようにテストしますか? 通常、BLL を「モック」して、予測可能な結果が返されるようにする必要があります。静的クラスでこれを行うのは難しいでしょう。

于 2012-01-25T04:45:39.537 に答える