首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设计最佳实践-对象是否应该拥有传递给其构造函数的内容?

设计最佳实践-对象是否应该拥有传递给其构造函数的内容?
EN

Stack Overflow用户
提问于 2011-09-24 06:26:13
回答 5查看 105关注 0票数 4

我有以下课程:

代码语言:javascript
复制
public class SqlCeEventStore: EventStore
{
  private EventStoreDB db;

  public SqlCeEventStore(EventStoreDB db)
  {
    this.db = db;
  }

  public void Dispose()
  {
    db.Dispose();
  }
}

我的问题是:在类的EventStoreDB方法中配置Dispose是否正确,因为它是在构造函数中传递给它的(因此,可以想象,在释放类之后可以重用它)?

也就是说,如果我处理它,我要求我的类的正确用法是:

代码语言:javascript
复制
using (var store = new SqlCeEventStore(new EventStoreDB)){
{
  //...
}

但我可以看到有人在用这个替代电话:

代码语言:javascript
复制
using (var db = new EventStoreDB())
using (var store = new SqlCeEventStore(db))
{
  //...
}

在这种情况下,我不应该从EventStoreDB类中释放SqlCeEventStore

这种风格和另一种风格有什么争论吗?我想选一个并坚持下去,我宁愿不抛硬币:)

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-09-24 06:40:20

一般来说,这是没有规则的,但是是的,我同意,由于对象是在您的作用域之外创建并传递给您的,所以您不拥有它。

如果您已经创建了它,那么您应该完全有权做任何您喜欢做的事情(记录调用者的预期行为)。

这是经典的合成与聚集材料。

票数 2
EN

Stack Overflow用户

发布于 2011-09-24 06:35:12

如果EventStoreDB属于SqlEventStore (即是其组成的一部分),则应由SqlEventStore类构造或合并。

如果它的使用超出了SqlEventStore生存期的范围,那么它应该由外部代码创建和处理。

票数 1
EN

Stack Overflow用户

发布于 2011-09-24 06:35:17

这里没有一般的规则,而国际水文学组织也不应该有这样的规则。不同的对象有不同的生命周期,最普遍的指导方针是确保对象按照其生命周期进行一致的管理,并且寿命尽可能短。

您可以尝试使用以下指导方针(但在需要时不要害怕偏离):在分配对象时在相同范围内释放对象。这个准则适用于许多场景,这正是using语句简化的地方。

如果你有一个没有明显处置点的长寿物体,别担心。这很正常。然而,问问你自己:我真的需要这个物体活多久?还有其他方法可以让我的寿命缩短吗?如果您能找到另一种缩短寿命的方法,这通常会使对象更易于管理,并且应该是首选的。

但是,这里也没有“一条真正的规则”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7537425

复制
相关文章

相似问题

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