在OOP中,将某些属性值从一个对象传递到另一个对象的最佳方式是什么?
考虑从B类实例化的a类。B类要求从a类实例获得某些值。从实体或其他设计原则来看,将这些值从a传递到B的最佳实践是什么:在OOP中,将某些属性值从一个对象传递到另一个对象的最佳方式是什么?,oop,design-patterns,Oop,Design Patterns,考虑从B类实例化的a类。B类要求从a类实例获得某些值。从实体或其他设计原则来看,将这些值从a传递到B的最佳实践是什么: 通过将A的整个实例传递给B的构造函数 只需将必要的属性值从A的实例传递给B的构造函数 视情况而定 对于第(3)种情况,哪种标准会支持一种或另一种解决方案 (我不知道这是否会对可能的答案产生影响,但我正在用Python编写代码)我认为您遗漏了一个答案,而实际上这是最常见的一个 将整个对象的引用传递给B,B保存引用,或复制构造期间所需的值 根据对象之间的关系,两者都可以接受 对于实
不管它值多少钱,我通常使用#2,但如果我通常基于B构造,我将创建一个特殊的构造函数fascade,它接受B并将所需的值收集到主构造函数中。这是一个开放的问题,我会说这取决于情况。由于您明确地说B将从A实例化,因此我假设Dependency注入(SOLID中的D)是不可能的。然后,除了尽可能保持代码整洁的总体目标外,我将重点讨论Ssingle responsibility原则 需要考虑以下几点:
- B实际需要多少个“值”?如果B只需要一个或两个简单的值,那么我会将它们作为参数传递进来,以保持其干净和简单。如果它需要的不止这些,那么您可以将整个A(或对它的引用)作为参数传入,并让B从中选择它需要的内容,或者创建另一个类(C?),该类正好包含所需的值。这将保持B的构造函数签名相当干净,并减少添加/更改传递到其中的数据的负担(与修改B的签名以及对它的所有调用相比,在以后修改C可能更容易,也不那么麻烦)
- B将在何处使用?如果它只被A使用,那么让B根据需要直接从A获取数据可能是有意义的。如果它将被其他地方和其他类使用,那么最好最小化对的任何依赖,并确保它从一开始就拥有所需的一切。如果B有可能需要通过网络等进行序列化、存储或发送,这也适用,因为它可能无法访问a