2010-12-27 7 views
1

私は簡単なデータベーステーブルを持っていて、電子メールでORに登録したユーザーのリストを格納しています。また、Web UI上でのみ表示することもできます。ストレージテーブルでは、これは番号で制御されます(1 - サイト2の電子メールによる表示)。 UIで表示しているときは、ユーザーが登録している各フォルダの横にチェックボックスを表示する必要があります(両方のメールは&サイトにあります)。戦略に合ったデザインパターンはどれですか?

ユーザがサブスクリプションを表明していない場合、各ユーザに適用されるデフォルトサブスクリプションのセットを格納する別のテーブルがあります。これは基本的にフォルダIDと仮想グループ名です。

しかし、電子メールの購読は、これらのデフォルトグループを適用することにはカウントされません。したがって、「オンサイト」サブスクリプションがデフォルトグループを適用しない場合。それはルールです。

どのようにここでの戦略パターン(擬似コード)

Interface ISubscription 
    public ArrayList GetSubscriptionData(Pass query object) 

Public class SubscriptionWithDefaultGroup 
    Implement ArrayList GetSubscriptionData(Pass query object) 

Public class SubscriptionWithoutDefaultGroup 
    Implement ArrayList GetSubscriptionData(Pass query object) 

Public class SubscriptionOnlyDefaultGroup 
    Implement ArrayList GetSubscriptionData(Pass query object) 

についてこれも、理にかなっていますか?私は批評/助言/メモを受け取って喜んでいます。私は学んでいます。

乾杯

答えて

2

下記のとおりです。私の選択はデコレータパターンを使用することです。私があなたの問題を理解する方法では、常にデフォルトのサブスクリプションがあり、ユーザーは追加でサブスクリプションを追加することができます。 戦略ALTERNATE実装ためのものであるとデコ機能強化のこの種のためのものです。

Interface ISubscription 
{ 
    public List<ISubscription> GetSubscriptions(Pass query object); 
} 

Public class DefaultSubscritions implements ISubscription {...} 

Public class SubscribedSubscritions implements ISubscription 
{ 
    private ISubscription sub; 

    public class SubscribedSubscritions(ISubscription in) 
    { 
    sub=in; 
    } 

    public List<ISubscription> GetSubscriptions(Pass query object) 
    { 
    List<ISubscription> defaultSubs=sub.GetSubscriptions(...); 
    List<ISubscription> additionalSubs=//retrieve the subscribed ones 


    List<ISubscription> allSubs=//defaultSubs + additionalSubs 

    return allSubs; 
    } 
} 

戦略は、あなたが代替実装で何かを交換することができます。 Decoratorはオブジェクトを透過的に拡張します。

+0

読んでいただきありがとうございます。私は読んで、完全に理解し、できるだけ早く帰ろう。再度、感謝します。 – VJVRR

+0

理解していない場合はフォローアップの質問をしてください。そして、あなたがこの答えが役に立ったと思ったら、答えとしてこれを受け入れてください –

関連する問題