Oop 面向对象设计:将数据从类A复制到类B P>考虑到坚实的原则和可测试性,考虑以下情况:
类A和类B有一些重叠的属性。您需要一个将公共属性从类a复制和/或转换为类B的方法。该方法在哪里Oop 面向对象设计:将数据从类A复制到类B P>考虑到坚实的原则和可测试性,考虑以下情况:,oop,testing,solid-principles,Oop,Testing,Solid Principles,类A和类B有一些重叠的属性。您需要一个将公共属性从类a复制和/或转换为类B的方法。该方法在哪里 类A作为B GetAsB() B类作为构造函数B(输入) B类作为方法void FillWithDataFrom(输入) 类C作为静态方法B转换器B(源) 我会排除1。因为应该避免使用getter方法(告诉,不问原则) 我排除第二条。因为它看起来像一个转换,如果a和B是不同的类,碰巧有一些共同点,那么这不是一个转换。至少,从描述中可以看出这一点。如果不是这样的话,2也将是一个选择 是的。意味着C知道
我会排除1。因为应该避免使用getter方法(告诉,不问原则) 我排除第二条。因为它看起来像一个转换,如果a和B是不同的类,碰巧有一些共同点,那么这不是一个转换。至少,从描述中可以看出这一点。如果不是这样的话,2也将是一个选择 是的。意味着C知道B和/或C的内部细节?如果是这样,我也会排除这个选择
我投3票。然后。视情况而定,在不同的情况下都有意义;Java中的一些示例:
String java.lang.StringBuilder.toString()
java.lang.StringBuilder(字符串源代码)
void java.util.GregorianCalender.setTime(日期时间)
ArrayList java.util.Collections.list(枚举e)
- 哪个依赖关系更有意义?A依赖于B,B依赖于A,两者都不是
- 您是否总是从a创建新的B,还是需要使用As填充现有的B
- 是否有其他类具有类似的协作,或者作为Bs的数据提供者,或者作为as数据的目标
- 这是否是正确的OOP理论有待讨论,但根据具体情况,我不会很快排除C。虽然ti确实创建了一个相当大的依赖项,但如果C的特定角色是管理从a到B的交互(和复制),它可以发挥作用。在C中创建依赖项是为了避免在a和B之间创建这样的依赖项。此外,C的存在是为了管理依赖项,并且可以考虑到这一点来实现
例如(在vb.Net/伪代码中):
如果有具体的理由创建(比如)AtoBConverterClass,那么这种方法可能是有效的
同样,这可能是一个特殊情况。然而,我发现它有时很有用。特别是如果有非常重要的原因让A和B彼此不了解的话 这可能更适合程序员。stackexchange.com是的,4意味着C知道A和B的内部细节。谢谢你的意见。给了我一些思考的素材。非常有趣的是,这四种策略都应用于.Java框架中。NET中有非常相似的模式,我只是没有仔细考虑它为什么以这种或那种方式实现。你的问题也很有帮助,谢谢。
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