首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跨多个软件版本管理对象构造函数

跨多个软件版本管理对象构造函数
EN

Stack Overflow用户
提问于 2011-04-12 14:49:08
回答 4查看 61关注 0票数 4

我正在设计一个库,在这里我正在讨论是否应该使用构造函数来初始化api模型中的对象。我的考虑是:

  1. 通过使用构造函数,我可以根据模型强制执行拥有有效对象所需的数据。
  2. 但是,通过使用构造函数,我想知道如何在修改代码时维护代码,以便在不破坏整个代码库的现有代码的情况下维护这个需求。
  3. 我可以避免在对象设计中使用构造函数,但我需要该库与使用它的开发人员通信,为了使对象满足其模型,需要哪些字段。

如何创建一个对象模型来表示正在初始化的特定属性的需求,并提供与代码维护相关的可伸缩性?

代码语言:javascript
复制
dim objV1 as new ObjectOfSomeType(Param1, Param2, Param3)

VS

代码语言:javascript
复制
dim objV1 as new ObjectOfSomeType()

objV1.Property1 = Param1
objV1.Property2 = Param2
objV1.Property3 = Param3
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-04-12 19:49:12

对象所需的最小初始状态,即对象以确定性方式行为所需的数据,应在构造过程中设置。

如果您质疑使用API成功构造对象的客户端的能力,那么您应该发布一个包含工厂方法模式的类,并鼓励和/或限制它的使用。

票数 2
EN

Stack Overflow用户

发布于 2011-04-12 15:00:42

如果对象状态的有效性需要初始化某些属性,则必须由构造函数初始化,并使其成为只读

这将对类及其用户提出一个要求,这将使更改变得更加困难,但您不能拿蛋糕吃

一个可能的折衷方案是设计一个带有受保护构造函数()的抽象基类,而其他实现可以派生和定义其他构造函数并更改行为。

票数 2
EN

Stack Overflow用户

发布于 2011-04-12 14:58:03

综上所述,构造函数是确保只实例化有效对象的最简单方法。

但是,通过使用构造函数,我想知道如何在修改代码时维护代码,以便在不破坏整个代码库的现有代码的情况下维护这个需求。

我不太清楚您所指的是什么:您以后可能会意识到创建有效对象需要额外的(或更少的)参数吗?在发布库之前,应该通过仔细的设计、原型开发和测试来减轻IMHO 的影响。公共API很难更改。在广泛使用的情况下,即使是破损和过时的特性也需要无限期地支持(在Java中可以看到Object.clone() )。不管您(或客户端)做什么来构造一个对象,如果一个必需的参数被证明是丢失的,那么它就是一个错误。与运行时相比,更好的方法是检测此类情况的编译时间,而构造函数提供了实现这一目标的最简单和最简单的方法。

您可能需要考虑的其他选项:

  • 使用工厂法 (您仍然需要在创建方法中拥有所有必需的参数,但是您可能可以对缺少的参数使用一些默认值,从而避免中断客户端代码),
  • 使用构建器 (类似于上面的内容,但在设置构造参数或提供默认值时提供了更大的灵活性)。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5637189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档