我正在设计一个库,在这里我正在讨论是否应该使用构造函数来初始化api模型中的对象。我的考虑是:
如何创建一个对象模型来表示正在初始化的特定属性的需求,并提供与代码维护相关的可伸缩性?
dim objV1 as new ObjectOfSomeType(Param1, Param2, Param3)VS
dim objV1 as new ObjectOfSomeType()
objV1.Property1 = Param1
objV1.Property2 = Param2
objV1.Property3 = Param3发布于 2011-04-12 19:49:12
对象所需的最小初始状态,即对象以确定性方式行为所需的数据,应在构造过程中设置。
如果您质疑使用API成功构造对象的客户端的能力,那么您应该发布一个包含工厂方法模式的类,并鼓励和/或限制它的使用。
发布于 2011-04-12 15:00:42
如果对象状态的有效性需要初始化某些属性,则必须由构造函数初始化,并使其成为只读。
这将对类及其用户提出一个要求,这将使更改变得更加困难,但您不能拿蛋糕吃。
一个可能的折衷方案是设计一个带有受保护构造函数()的抽象基类,而其他实现可以派生和定义其他构造函数并更改行为。
发布于 2011-04-12 14:58:03
综上所述,构造函数是确保只实例化有效对象的最简单方法。
但是,通过使用构造函数,我想知道如何在修改代码时维护代码,以便在不破坏整个代码库的现有代码的情况下维护这个需求。
我不太清楚您所指的是什么:您以后可能会意识到创建有效对象需要额外的(或更少的)参数吗?在发布库之前,应该通过仔细的设计、原型开发和测试来减轻IMHO 的影响。公共API很难更改。在广泛使用的情况下,即使是破损和过时的特性也需要无限期地支持(在Java中可以看到Object.clone() )。不管您(或客户端)做什么来构造一个对象,如果一个必需的参数被证明是丢失的,那么它就是一个错误。与运行时相比,更好的方法是检测此类情况的编译时间,而构造函数提供了实现这一目标的最简单和最简单的方法。
您可能需要考虑的其他选项:
https://stackoverflow.com/questions/5637189
复制相似问题