考虑到SOLID原则和可测试性,请考虑以下情况:
你有A类和B类,它们有一些重叠的属性。您需要一种方法,将公共属性从A类复制和/或转换为B类。该方法在哪里?
答案 0 :(得分:1)
我排除了1.因为应该避免使用getter方法(告诉,不要问原则)。
我排除2.因为它看起来像转换,如果A和B是不同的类,恰好有一些共同点,那么这不是转换。至少,这是从描述中看出来的。如果情况并非如此,那么2也可能是恕我直言。
4是否暗示C知道B和/或C的内部细节?如果是这样,我也会排除这个选项。
我投票支持3.然后。
答案 1 :(得分:1)
这取决于所有在不同情况下都有意义;来自Java的一些例子:
String java.lang.StringBuilder.toString()
java.lang.StringBuilder(String source)
void java.util.GregorianCalender.setTime(Date time)
ArrayList<T> java.util.Collections.list(Enumeration<T> e)
有些问题可以帮助您做出决定:
答案 2 :(得分:0)
这是否是正确的OOP理论是有争议的,但根据具体情况,我不会那么快地排除C。虽然ti DOES创建了一个相当大的依赖,但如果C的特定角色是管理从A到B的交互(和复制),它可以使用它。依赖是在C中创建的,专门用于避免在A和B之间创建这种依赖此外,C专门用于管理依赖关系,并且可以在考虑到这一点的情况下实现。
实施例。 (在vb.Net/Pseudocode中):
Public Class C
Public Shared Function BClassFactory(ByVal MyA As A) As B
Dim NewB As New B
With B
.CommonProperty1 = A.CommonProperty1
.CommonProperty2 = A.CommonProperty2
End With
Return B
End Function
End Class
如果有一个具体的理由来创建AtoBConverterClass,这种方法可能是有效的。
同样,这可能是一个专门的案例。但是我发现它有时很有用。特别是如果有真正重要的理由让A和B对彼此无知。