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

Should I encapsulate id field with my own type?

考虑以下片段:

class User {
  String id;

  ...other fields
}
class Id extends String {

}

class User {
  Id id;

  ...other fields
}

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

这种技术称为微打字,有时也称为微型打字。它往往使您的代码更具表现力,从而更安全、更易读。 然而,它也创建了另一层间接:代码的 reader 必须了解 Id 是什么才能完全理解它。她可能已经知道 String 是什么了。

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

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

class Id {
    private String id;
    ...
}