gpt4 book ai didi

java - 将电子邮件、电话号码和 ID 表示为 POJO 而不是字符串

转载 作者:行者123 更新时间:2023-11-30 06:15:42 25 4
gpt4 key购买 nike

我有一个典型的业务 Web 应用程序,其中域包含帐户和用户等实体。我的后端是 Java,所以它们由 POJO 表示。在早期的迭代中,那些 POJO 的每个属性都只是字符串。这是有道理的,因为 html 输入是一个字符串,并且数据在数据库中的持久化方式也类似于字符串。

最近,我们一直在努力验证这种输入,我发现如果我为这种属性切换到对象表示法会很有帮助。例如,TelephoneNumber 类包括:

  • (int) 国家代码
  • (string) 剩下的数字
  • (静态字符)国家调用代码前缀字符(在我们的例子中是 +)
  • (静态模式)匹配电话号码是否合理的正则表达式
  • 比较和验证电话号码的方法。

这个类有优点也有缺点:

  • 不好:额外的对象创建和字符串/对象之间的转换
  • 好:OOP 和有关电话号码的所有逻辑都捆绑在一个类中(高内聚),
  • 很好:每当需要电话号码作为方法或构造函数的参数时,java 的严格类型清楚地表明我们不只是在处理随机字符串。

比较可能混淆的双字符串:

public User(String name, String telephoneNumber)

与干净的 OOP 方式相比:

public User(String name, TelephoneNumber telephoneNumber)

我认为在这种情况下,优势大于劣势。我现在关心的是以下两个属性:

-id(如 b3e99627-9754-4276-a527-0e9fb49d15bb)-电子邮件地址

这个“对象”实际上只是一个字符串。把它们变成物体似乎有点过分了。特别是 user.getMail.getMailString() 这类方法真的让我很困扰,因为我知道 mailString 是邮件的唯一属性。但是,如果我不将它们变成一个对象,我将失去一些优势。

所以我的问题是:您如何在网络应用程序中处理这些概念?是否有最佳实践或其他问题需要考虑?

最佳答案

如果您对所有内容都使用字符串,您实际上就放弃了类型安全,并且您必须在使用该字符串的任何类或方法中进行“类型检查”和验证。不可避免地,此验证代码会重复并使其他类变得臃肿、困惑,并且可能不一致,因为所有地方的验证都不相同。你永远无法真正确定字符串包含什么,因此调试变得更加困难,维护变得难看,最终浪费了开发人员的大量时间。鉴于现代处理器的强大功能,您不必担心使用大量对象的性能成本,因为牺牲程序员的工作效率不值得(在大多数情况下)。

我发现的另一件事是,字符串变量往往更容易被 future 需要进行“快速修复”的程序员滥用,因此为了方便,他们会在需要的地方设置新值,而不是扩展类型并明确发生了什么。

我的建议是尽可能使用有意义的类型。

最大化打字的好处导致了“微型类型”的想法,您可以在这里阅读:http://darrenhobbs.com/2007/04/11/tiny-types/

本质上,这意味着您创建类来表示一切。在您使用 User 类的示例中,这意味着您还将创建一个 Name 类来表示名称。在该类中,您可能还有另外两个类,FirstNameLastName。这增加了代码的清晰度,并最大限度地减少了编译器阻止您犯的逻辑错误的数量。在大多数情况下,您永远不会在需要姓氏的地方使用名字,反之亦然。

关于java - 将电子邮件、电话号码和 ID 表示为 POJO 而不是字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28369057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com