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

Posted

技术标签:

【中文标题】检查电子邮件是不是存在的最佳方法【英文标题】:Best way to check if an email exists检查电子邮件是否存在的最佳方法 【发布时间】:2017-11-03 16:27:47 【问题描述】:

我使用 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 

你有什么建议吗?

最好的问候

【问题讨论】:

“最好的方法”是什么意思?性能最好?可维护性?你的教师学位?更少的代码? 我的意思是性能和速度 请澄清。什么速度?你打算使用 clasters 吗?您确定会有 1,000 封电子邮件,而不是 1,001 封吗? 我有一个包含 1000 封电子邮件的固定列表。当用户询问 API createUser 时,我需要检查他的电子邮件是否在该列表中。如果检查正常,我将设置一个布尔值,表明他是我公司的老用户。我的问题是,就时间而言,获得该布尔值(存在与否)的最快实现是什么。 【参考方案1】:

这取决于。不要希望您在第一时间找到正确的解决方案。把它写下来,然后继续。如果您遇到一些问题,请返回并重新编写。这是编程的惯例

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


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

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;

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

【讨论】:

谢谢@ADS 但我将在 checkIfEmailExist 内部实施的最快解决方案是什么。 最快的解决方案是写下getCorrectEmails()//TODO 除非你知道它经常会被改变以及它会改变谁,否则你不知道你需要什么。没关系,因为在运行原型一周后你会知道很多事情。你肯定会重写这个方法所以现在不要关心它

以上是关于检查电子邮件是不是存在的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

使用 rake 任务时检查电子邮件是不是发送一次的最佳方法是啥?

如何检查电子邮件是不是确实存在

使用电子邮件地址检查 PayPal 帐户是不是存在?

检查数据库中是不是已存在电子邮件地址

使用 TELNET 和 PHP 检查是不是存在电子邮件

在 Flutter App 的 Firebase Auth 中检查电子邮件是不是已存在