我遇到了一个问题,其中我有两个具有完全相同成员但名称不同的结构(明显违反DRY)。这背后的原因是struct A
是函数的输入,struct B
是函数的输出。 struct A
和B
的成员完全相同,但它们代表不同的东西。我该如何解决这个问题?
在我的头脑中,我想到了一个父基类,然后让A
和B
继承它,但是把它留空。
更具体地说,我正在开发一个简单的搜索和替换工具。第一个函数创建了一个SearchResult
的列表,每个SearchResult
包含startingIndex
和text
(已搜索的文本可能有所不同(想想正则表达式) ))。一旦创建了这些SearchResult
,我就可以将它们传递给一个替换函数,该函数遍历SearchResult
列表然后替换它们。输出是ReplaceResult
s的列表 - 在此结构中,它还有startingIndex
和text
(但文本是"被替换后的文本")
我正在学习C#,想到了这个简单的项目。
答案 0 :(得分:3)
情侣选项
为什么不使用SearchResult
和ReplaceResult
结构,为什么不使用单个结构,也许称为IndexedTextItem
?
您可以实施IIndexedTextItem
界面,并将SearchResult
和ReplaceResult
更改为实现它的类。
为什么不将它们分开?毕竟它们是不同的东西。具有两个具有相似数据类型但用于不同目的的结构不一定违反DRY。您可能希望将来扩展其中一个,例如也许您可能需要在OriginalText
结构中添加ReplaceResult
元素,以便稍后支持“撤消”功能。