design-patterns - DTO 的前缀模式
问题描述
我有一些端点,它们有它们的 DTO。如今,DTO 的名字变得糟糕透顶。例如,服务:order/item/ean 我们的主要响应文件,被命名为:OrderItemEanResponseVo。所有子类都收到前缀 OrderItemEan。
但是,例如,我们在其中有一个实体 OrderItem。它的名字是:OrderItemEanOrderItemVo。
是的,太可怕了。
你知道命名 DTO 的任何模式吗?
解决方案
正如您可能猜到的那样,没有一个单一的答案,但是当涉及到命名时,特别是在嵌套上下文中,我通常参考 Robert C. Martin 的 Clean Code Chapter 2, Don't Add Gratuitous Context:
“在一个名为“Gas Station Deluxe”的假想应用程序中,在每个班级前加上 GSD 是一个坏主意。坦率地说,你正在反对你的工具。你输入 G 并按下完成键,并获得一英里长的列表作为奖励系统中的每个班级。”
[...]
名称
accountAddress
和customerAddress
是类实例的好名称,Address
但可能是类的糟糕名称。Address
是一个类的好名字。如果我需要区分 MAC 地址、端口地址和 Web 地址,我可能会考虑PostalAddress
、MAC
和URI
.
使用有意义的上下文,但不要让您的命名成为您的域顶部的线索。这就是您的命名空间的用途。
例如,考虑一个MovieRepository
用于检索电影的存储库的 get 方法。无意义的上下文将是给它一个方法GetMovie(int id)
。相反,使用Get(int id)
. 这是足够的上下文,因为您的消费者很清楚他们正在使用的上下文。
我认为只有您和您的同事足够了解您的领域,才能确定需要多少上下文才能使其有意义,而不是浪费,但如果有必要使用 OrderItem 作为其嵌套成员的前缀以使其有意义,也许您需要考虑它们是否与您的业务领域密切相关,或者过于笼统?
推荐阅读
- json - 如何使用 jq 将任意嵌套的 JSON 转换为 CSV - 这样您就可以将其转换回来?
- flutter - 如何在颤动中为 IpAddress 制作 TextInputFormatter 掩码
- groovy - 从一个项目中获取 isbn 并将其传递给 soapui 中的另一个项目
- c++ - 将索引 i 处的字符串与 C++ 中的值进行比较
- asynchronous - Rust:Tokio + Warp 在后台运行
- pandas - 如何根据队友预测获胜者
- snakemake - Snakemake 集群模式,每个规则的 CPU 计数不同
- viewmodel - Jetpack Compose 在 ViewModel 中观察 mutableStateOf
- emacs - (Emacs) 括号没有正确缩进
- wordpress - woocommerce_shared_settings 弃用的控制台错误