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

标签 oop

关闭。这个问题是opinion-based .它目前不接受答案。












想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题.

2年前关闭。




Improve this question




我有以下类(class):

public class SqlCeEventStore: EventStore
{
  private EventStoreDB db;

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

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

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

也就是说,如果我处理它,我会要求我的类的正确用法是:
using (var store = new SqlCeEventStore(new EventStoreDB)){
{
  //...
}

但我可以看到正在使用这个替代调用:
using (var db = new EventStoreDB())
using (var store = new SqlCeEventStore(db))
{
  //...
}

在这种情况下,我不应该处理 EventStoreDB来自 SqlCeEventStore类(class)。

对一种风格或另一种风格有任何争论吗?我想选择一个并坚持下去,我宁愿不抛硬币:)

最佳答案

一般来说,这没有规则,但是我同意,因为对象是在您的范围之外创建并传递给您的,所以您不拥有它。

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

这是经典composition vs aggregation东西。

关于oop - 设计最佳实践 - 对象是否应该拥有传递给其构造函数的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7537425/

相关文章:

Java Custom Date 类 date To String() 未将日期打印为 String

database - 如何编写多对多关系的代码?

对结构进行操作的函数的约定

php - 类方法的正确 DocBlock 注释,实现了工厂设计模式

Java utils 类,静态方法与注入(inject) utils 类

python - 全局名称未在 Python 中定义

oop - 有 OOP 的卡通指南吗?

Python继承结构

database - 事件记录设计模式?

php - 学习 OOP PHP : Identifying Classes, 测验系统的关联