Jika Anda dapat memberikan fungsionalitas yang cukup bermanfaat bagi kelas untuk membenarkan kerumitan tambahan karena tidak menjadi string, maka lakukanlah. Untuk pengidentifikasi seperti ISBN dan ISIN, saya menduga ini bukan masalahnya.
Agar kelas pengenal bermanfaat, saya berharap akan terlihat seperti ini:
class ISIN {
fromCUSIP()
fromRawISINString()
toString(ISIN::FormatType)
getExchange()
getCountryCode()
getLastFourDigits()
getWhateverCode()
...
}
Jika sebaliknya terlihat lebih seperti ini:
class ISIN {
getString()
setString()
}
Kemudian saya membuang seluruh kelas, menggunakan string biasa di mana-mana, dan memastikan saya secara konsisten menggunakan "isin" di semua nama variabel yang relevan.
Perhatikan bahwa dalam beberapa bahasa, menambahkan tipe baru hampir tidak memiliki "kompleksitas tambahan" dalam program tipikal, dalam hal ini Anda akan didorong untuk membuat tipe baru bahkan jika itu tidak memiliki fungsionalitas sama sekali. Tetapi ini tidak berlaku untuk sebagian besar bahasa OOP tradisional seperti C ++.