检查电子邮件是否存在的最佳方法

时间:2017-06-02 09:49:36

标签: java spring spring-boot

我使用spring-boot框架开发了一个应用程序java。在我的班级中,在保存用户之前,我需要检查他的电子邮件是否存在于1000封电子邮件列表中,如果检查结果正常,我必须设置一个布尔表示用户是一个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 

你有什么建议吗?

祝你好运

1 个答案:

答案 0 :(得分:-1)

这取决于。不要希望你第一次找到正确的解决方案。把它写下来再去吧。如果遇到一些问题则返回并重新编写。这是编程中的惯常做法

此时您可以做的主要事情是开发一种不会随时改变的合同(或界面)。最简单的合同是Collection<String> getCorrectEmails()。可能Iterable<String> getCorrectEmails()会更好,因为您可以使用流/数据库/微服务/无论

实现它

<强>已更新 由于您只有1000封可能不会更改的电子邮件,因此您可以对其进行硬编码。为避免源代码膨胀,我建议在另一个文件中引入一个持有者:

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(
      "email1@domain",
      "email2@domain",
     // many lines here
      "email1000@domain"
      );
}

然后在你的班级中使用它

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

注意我只是在方法内部调用ValidEmailHolder.getEmails()。这是一个Bridge pattern,如果你想改变行为,它会帮助你。您很可能想要在外部文件中引入电子邮件列表,可能在数据库中甚至在系统属性中。然后你可以写下ValidEmailFileHolder,然后只需更改电话。你也可以像这样添加逻辑

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

但可能你不需要这个。你可以轻松地做到这一点