Design patterns DTO的前缀模式
我有一些端点,它们有自己的DTO。 如今,DTO的名字越来越糟糕。 例如,服务:order/item/ean 我们的主要响应文件名为:OrderItemEanResponseVo。 所有子类都收到前缀OrderItemEan 但是,例如,我们在其中有一个实体OrderItem。 它的名称是:OrderItemEanOrderItemVo 是的,太可怕了Design patterns DTO的前缀模式,design-patterns,Design Patterns,我有一些端点,它们有自己的DTO。 如今,DTO的名字越来越糟糕。 例如,服务:order/item/ean 我们的主要响应文件名为:OrderItemEanResponseVo。 所有子类都收到前缀OrderItemEan 但是,例如,我们在其中有一个实体OrderItem。 它的名称是:OrderItemEanOrderItemVo 是的,太可怕了 您知道DTO的命名模式吗?正如您可能猜到的,这个问题没有单一的答案,但当涉及到命名时,特别是在嵌套上下文中,我通常参考Robert C.Mart
您知道DTO的命名模式吗?正如您可能猜到的,这个问题没有单一的答案,但当涉及到命名时,特别是在嵌套上下文中,我通常参考Robert C.Martin的干净代码第2章,不要添加不必要的上下文: 在一个被称为“加油站豪华”的虚拟应用程序中,这是一个坏消息 用GSD作为每个类的前缀的想法。坦白说,你是在反对GSD 您的工具。您键入G并按完成键,将获得奖励 有一个一英里长的系统中每个类的列表。” [……] 名称
accountAddress
和customerAddress
是
类的实例地址
,但可能是类的糟糕名称。
Address
是一个很好的类名称。如果我需要区分
MAC地址、端口地址和Web地址,我可能会考虑
PostalAddress
、MAC
和URI
使用有意义的上下文,但不要让您的命名成为一条通向域顶部的线索。这就是名称空间的用途
例如,考虑存储库的get方法,MovieRepository
,它检索电影。无意义的上下文是给它一个方法GetMovie(intid)
。相反,请使用Get(int-id)
。这是足够的上下文,因为您的消费者非常清楚他们正在使用的上下文
<> P>我认为只有你和你的同事知道你的领域足够确定它有多少上下文是有意义的,而不是浪费的,但是如果有必要使用OrthItor作为其嵌套成员的前缀,使它们有意义,也许你需要考虑它们是否紧密地绑定到你的业务领域,或者可能过于笼统?名称中还可以使用哪些字符?例如,使用下划线将类名与成员名分开?使用操作词,或者真正考虑在类名中需要什么ORD,也会产生不同。是真的和OrderItem碰巧包含了EAN,还是OrderItemEanMapping?