我应该用我自己的类型封装 id 字段吗?

Hle*_*kyi 1 language-agnostic types

考虑以下片段:

class User {
  String id;

  ...other fields
}
Run Code Online (Sandbox Code Playgroud)
class Id extends String {

}

class User {
  Id id;

  ...other fields
}
Run Code Online (Sandbox Code Playgroud)

我应该使用哪一种?我从未见过任何人使用他们自己的 Id 类型。现在我在想:这样做有什么缺点吗?

Fra*_*fer 5

这种技术被称为microtyping,有时小小的打字。它往往会使您的代码更具表现力,从而更安全和更具可读性。然而,它也创造了另一层间接性:代码的读者必须了解 anId是什么才能完全理解它。她可能已经知道 aString是什么了。

一般来说,我强烈推荐微打字。可能有些情况可能会做得过头,但到目前为止我还没有找到。所以别担心。

关于您的具体实现:在某些语言(如 Java)中,不可能从标准类(如String. 在 C++ 等其他语言中,这是可能的,但不推荐。因此,我宁愿使用组合而不是继承:

class Id {
    private String id;
    ...
}
Run Code Online (Sandbox Code Playgroud)