gpt4 book ai didi

design-patterns - 使用字符串与枚举作为工厂方法的参数?

转载 作者:行者123 更新时间:2023-12-05 08:47:39 24 4
gpt4 key购买 nike

我最近在读这个博客 https://blog.cleancoder.com/uncle-bob/2021/03/06/ifElseSwitch.html这一段让我感到困惑:

Be careful with that token x. Don’t try to make it an enum or anythingthat requires a declaration above the red line. An integer, or astring is a better choice. It may not be type safe. Indeed, it cannotbe type safe. But it will allow you to preserve the componentstructure of your architecture.

如果我们在高层模块中声明一个枚举,那低层模块不还是依赖高层模块吗?如果是这样,那么在这种情况下使用枚举有什么问题?

最佳答案

唯一能明确回答这个问题的人是 Robert C. Martin 本人,但我会尝试尝试。

据我了解,隐含的场景是 $input 参数代表运行时输入,这本质上不是类型安全。

在许多应用程序架构中,软件“与现实世界相接”存在边界。在原始应用程序中,您可能会要求用户键入 0 表示男性,输入1 表示女性。在控制台应用程序中,您甚至不会收到 int - 您会收到 string

在 Web 应用程序中,您很容易遇到类似的问题。即使你用单选按钮制作了一个漂亮的 GUI,你也不能完全相信一些恶意用户不会试图绕过 GUI 而是给你一个原始的 string - 或者,代码中其他地方的错误会产生类似的效果。

引入枚举不会改变这一点。您仍然需要将原始 string 解析为枚举值。如果您接下来要做的是切换枚举以生成多态对象,您不妨省去中间步骤,从而省去枚举。

这个讨论让人想起 Alexis King 的精彩博文 Parse, don't validate ,这提出了一个相似的观点:将结构较松散的东西变成结构更好的东西。

关于design-patterns - 使用字符串与枚举作为工厂方法的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67150424/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com