2017-06-02 12 views
-5

私はspring-bootフレームワークを使用してアプリケーションJavaを開発しました。私のクラスでは、ユーザーを保存する前に自分の電子メールが1000の電子メールのリストに存在するかどうかをチェックする必要があります。チェックがOKならば、ユーザーがloyelユーザーであることをブール値に設定する必要があります。電子メールが存在するかどうかを確認する最良の方法

1- Read a file that contain the 1000 emails each time when a user will be created. What is the best way to do that without read every time the file ? 
using a singleton.... 
2- Create an email ArrayList and parse it each time ??? 
3. create a database and make a request to check each time if the email exists 

あなたはどんな提案を持っているでしょう:

私の質問は、ユーザーの電子メールは、短時間でそのリストには存在しないか、場合ことを確認するための最良の実装は何ですか?

お礼

+0

「最善の方法」と言ったらどういう意味ですか?パフォーマンスで最高?主観性?あなたの教師の学位?少ないコード? – ADS

+0

パフォーマンスとスピードを平均して – Victor

+0

を明記してください。何のスピード?あなたはクラスターを使いたいですか?正確に1,000の電子メールがあり、決して1,001ではないと確信していますか? – ADS

答えて

0

です。あなたが最初に正しい解決策を見つけることを願ってはいけません。書き留めて、次に進む。あなたがいくつかの問題に出会った場合は、復帰して書き直してください。プログラミングにおける通常の練習です

この時点であなたができることは、時々変わることのない種類の契約(またはインターフェイス)を開発することです。最も単純な契約はCollection<String> getCorrectEmails()です。おそらくIterable<String> getCorrectEmails()はあなたが唯一の千おそらくあなたがそれらをハードコーディングすることができ変わらないされた電子メールのを持っているので 更新ストリーム/データベース/ microservice /何でも


でそれを実装することができますので、良くなります。その後、

class ValidEmailHolder { 
    // note method is non-static. It WILL help you in the future 
    /* use Collection instead List isn't necessary but a good practice 
    to return more broad interface when you assume it could be changed in next 10 years */ 
    public Collection<String> getEmails() { 
     return EMAILS; 
    } 

    private static final List<String> EMAILS = Arrays.asList(
     "[email protected]", 
     "[email protected]", 
    // many lines here 
     "[email protected]" 
    ); 
} 

と私はちょうどメソッド内ValidEmailHolder.getEmails()を呼び出して、あなたのクラスで

public Collection<String> getValidEmails() { 
    ValidEmailHolder.getEmails(); 
} 

ノートを、それを使用します。ソースコードを避けるために私は別のファイルにホルダーを紹介示唆膨らませます。これはBridge patternです。ここでは、動作を変更したい場合に役立ちます。ほとんどの場合、外部ファイルに電子メールのリストを導入したいかもしれません。その後、ValidEmailFileHolderを書き留めて、単にコールを変更することができます。また、このようなロジックを追加することができます

Collection<String> result = ValidEmailDbHolder.getEmails(); 
if (result == null || result.isEmpty()) { 
    result = ValidEmailHolder.getEmails(); 
} 
return result; 

しかし、おそらくこれは必要ありません。あなたが簡単にできる点

+0

ありがとう@ADSしかし、私がcheckIfEmailExistの中で実装する最も速い解決策は何ですか。 – Victor

+0

最速の解決策は、 'getCorrectEmails(){// TODO}'を書き留めることです。 – ADS

+0

あなたは頻繁にそれが変更される可能性があり、あなたはあなたが必要なものを知っていないあなたが変更されます。プロトタイプを1週間実行した後で多くのことを知っているので大丈夫です。あなたは**このメソッドを間違いなく書き直します** **今すぐ気にしないでください – ADS

関連する問題