2010-12-06 14 views
1

ビジネス層とデータアクセス層を持つWebアプリケーションを考えてみましょう。したがって、処理されるためには、すべての要求をこれらの2つのレイヤーに渡す必要があります。Java - ビジネスサービス、データアクセスオブジェクト - シングルトンを使用する必要がありますか?

頻繁にリクエストが来るので、それぞれのリクエストを処理するために新しいビジネスとデータアクセスオブジェクトを作成することは賢明ではありません。この場合、通常、私はシングルトンのビジネスとDAOに行く傾向があります。

しかし、私はシングルトンパターンを使用する際に多くの問題を抱えています。多くの場合、そのパターンに対して(グローバルな理由から)示唆しています。その場合、上記のシナリオで正しい設計戦略は何でしょうか?

+0

「シングルトン」(これは問題ありません)と「シングルトンデザインパターン」(コードのにおい)を区別するように注意する必要があります。後者は前者を実装する方法です。 – skaffman

答えて

2

サービスオブジェクトはシングルトンである必要があります。

Springを使用すると、シングルトンサービスオブジェクトを管理できます。

+0

私はSpringを使用していない場合はどうしますか? – Veera

+0

@Veera、それはあなたがそれのために行くべきである場合、それは多くの利点があります –

+0

@Veeraそれを使用し始める? – NimChimpsky

2

このような場合に使用される通常の戦略は、ビジネスサービスとデータアクセスオブジェクトではなく、をシングルトンとしてシンプルなPOJOとして記述することです。そして、コンテナを使ってクラスのスコープを管理します。コンテナの例としては、SpringとGuiceがあります。要件が単純な場合は、独自のコンテナを作成することもできます。

このようにして、シングルトンパターンの利点を得ることができます(モックやテストなどが難しい)。

簡単な例:私はサーブレットにシングルトンを書くことは良いアイデアだと思いません

public class PersonService { 
    public Person getPerson(String id) { 
     //find and return the person 
    } 
} 

public class PersonServiceSingletonFactory { 
    private PersonService service = new PersonService(); 
    PersonService getInstance() { 
     return service; 
    } 
} 
0

、あなたはそれがオブジェクトのインスタンスが1つだけで実行されることを保証するのServletContextListener上のビジネスロジックを作成することができますスレッドセーフです。あなたは@ abhin4vが説明した方法でそれにアクセスできます。 Springフレームワークを使用していない限り、これはあなたがする必要があります。

希望します。

関連する問題