首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >收藏的吸气者和策划者的优点/建议

收藏的吸气者和策划者的优点/建议
EN

Software Engineering用户
提问于 2013-03-24 21:21:53
回答 2查看 492关注 0票数 1

我正在创建一个模型,其中一个元素可以包含其他元素。我目前正在编写模型的接口,我不确定这两个选项中哪一个是最好的:

选项1

代码语言:javascript
复制
interface Container {
  List<Element> getElements(); // returns an unmodifiable list.
  void addElement(Element e);
  void removeElement(Element e);
}

选项2

代码语言:javascript
复制
interface Container {
  List<Element> getElements(); // returns an unmodifiable list.
  void setElements(List<Element> elements);
}

每种选择的利弊是什么?此外,在这些情况下是否存在“接受”的命名约定,比如使用children而不是elements

EN

回答 2

Software Engineering用户

回答已采纳

发布于 2013-03-24 21:52:21

这实际上是一个“谁来管理名单”的问题。

在选项1中,您为容器提供元素,并让它负责管理它们:订单、可能拒绝某些元素等等。

对于选项2,容器是一个哑容器。它从其他人那里得到列表,对于它的内容和顺序没有发言权。

选项1将允许您(如果删除getElements())将容器的内容(或部分内容)隐藏在代码中的其他工作流中。它甚至可以通过在容器代码中提供线程安全处理来允许某种类型的多线程(尽管这听起来太过了)。

至于命名--对我来说,“元素”的意思是“我不在乎里面有什么”--所以通用容器会保存元素。“子女”意味着一种依赖关系:要处理父母,必须处理其所有的子女(树式)。

票数 1
EN

Software Engineering用户

发布于 2013-03-24 21:39:15

我一般倾向于备选案文3:

代码语言:javascript
复制
interface Container {
  MutableList<Element> getElements();
}

这是大多数在.NET框架中编写的API所使用的模式。它使API尽可能简单--特别是在.NET中,这里有属性getter,就像在myContainer.Elements.Add(new Element())中一样。

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

https://softwareengineering.stackexchange.com/questions/191790

复制
相关文章

相似问题

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