假设我有一个代表一个人的对象,使用该人的电子邮件地址的getter和setter方法.setter方法定义可能如下所示:
setEmailAddress(String emailAddress) { this.emailAddress = emailAddress; }
person.setEmailAddress(0)
然后,调用会产生类型错误,但调用person.setEmailAddress("asdf")
不会 - 尽管"asdf"绝不是有效的电子邮件地址.
根据我的经验,所谓的字符串几乎不是任意字符序列,对长度或格式没有限制.我想到了URI - 街道地址和电话号码一样,名字也一样......你明白了.然而,这些数据类型通常存储为"只是字符串".
回到我的个人目标,假设我修改setEmailAddress()
,像这样
setEmailAddress(EmailAddress emailAddress) // ...
where EmailAddress
是一个类...其构造函数采用电子邮件地址的字符串表示形式.我有什么收获吗?
好的,所以电子邮件地址是一个不好的例子.如何将URI类作为构造函数参数的URI字符串表示,并提供管理该URI的方法 - 设置路径,获取查询参数等.源字符串的有效性变得很重要.
所以我问你们所有人,你们如何处理具有结构的字符串?您如何在界面中明确您的结构期望?
谢谢.
"具有结构的字符串"是常见代码气味" 原始痴迷 " 的症状.
补救措施是密切关注验证或操纵这些结构部分的代码中的重复.在重复的第一个提示 - 但不是之前 - 提取一个封装结构的类,并在那里找到验证和查询.