该类的优点是它可以自动过滤分配/构造的错误字符串。它还可以让您绝对确定您正在处理一个文件名,而不仅仅是一个应该代表文件名的字符串。
类的问题是,限制在哪里?我们最终会创建大量不必要的类吗?例如,某些字符串只能介于 x 和 y 字符之间。我应该为那些人上课吗?
URL 的类呢?还是仅用于大写字符串的类?在哪里划清界限?
谢谢。
该类的优点是它可以自动过滤分配/构造的错误字符串。它还可以让您绝对确定您正在处理一个文件名,而不仅仅是一个应该代表文件名的字符串。
类的问题是,限制在哪里?我们最终会创建大量不必要的类吗?例如,某些字符串只能介于 x 和 y 字符之间。我应该为那些人上课吗?
URL 的类呢?还是仅用于大写字符串的类?在哪里划清界限?
谢谢。
这取决于上下文。在大多数应用程序中,您不会打扰,因为您给出的原因,也因为您使用的 API 期望文件名无论如何都是字符串(检查有效文件名有什么好处吗?也许您会看到当您尝试使用它时出现一个合适的错误,并且系统库中的代码将适应不同的平台,您可能不知道或正在对其进行测试......)。
但是,我可以想象一个专门的应用程序或库,其中了解目录和文件之间的区别可能很重要(类可以在类型级别标记区别),或者您需要大量与文件相关的信息(类将是收集这个的好地方)或在对文件名执行某些操作时获得高性能(该类可以通过缓存结果来帮助提高性能)等等。
所以最好的设计将取决于你在做什么。您的系统是否只有大写字符串很重要?您正在使用的网络库中没有 URL 吗?上下文就是一切……
尝试根据对象而不是简单的字符串来思考。字符串代表什么?如果它代表的不仅仅是一个单词或短语,那么一个类可能是有意义的。
与其定义 FileName 类,不如定义一个 File 类来表示实际文件。FileName 只是该类的一个属性(然后您可以将文件名验证放在该类中)。它还将为您提供构建有用的相关属性和方法的机会,例如 Open()、Write()、Close()、Read()、PathName 等。
同样,Urls 类也很有意义,因为您可能希望从字符串中提取其他详细信息。例如:主机名、端口、查询字符串。通过使其成为一个类,您可以将所有这些功能捆绑在一个位置。