问题标签 [composition]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1600 浏览

c# - Liskov 替换和组合

假设我有这样的课程:

而且我想扩展它以添加超出扩展方法可以做的东西......我唯一的选择是组合:

虽然这可行,但工作量很大......但是我仍然遇到了一个问题:

我可以在这里传入一个 Foo,但不能传入一个超级 Foo,因为 C# 不知道 SuperFoo 在 Liskov 替换意义上确实符合条件......这意味着我通过组合扩展类的用途非常有限。

所以,修复它的唯一方法是希望原始 API 设计者留下一个接口:

现在,我可以在 SuperFoo 上实现 IFoo(因为 SuperFoo 已经实现了 Foo,只是改变签名的问题)。

在完美世界中,使用 Foo 的方法会使用 IFoo 的:

现在,由于通用接口,C# 理解了 SuperFoo 和 Foo 之间的关系,一切都很好。

最大的问题是 .NET 封装了许多偶尔会很好扩展的类,而且它们通常不实现通用接口,因此采用 Foo 的 API 方法不会接受 SuperFoo 并且您不能添加重载.

所以,对于所有的作曲爱好者来说......你如何绕过这个限制?

我唯一能想到的就是将内部的 Foo 公开,这样你可以偶尔通过它,但这似乎很乱。

0 投票
3 回答
1472 浏览

php - 在 Zend Framework 页面中嵌入登录表单的最佳方式

在 Zend Framework 中将登录表单嵌入到多个页面中的最佳方法是什么?

目前我有两个控制器,用于单独登录表单的 LoginController 和用于索引页面上的操作的 IndexController。

我需要将登录表单包含在索引页面中,以让用户从首页和登录页面登录。

我目前的解决方案是让 IndexController 扩展 LoginController,但我必须对两个控制器的代码进行一些调整(例如,从子 indexAction 内部调用 parent::IndexAction 以呈现登录表单,并且也应该更新各种重定向)。

可以用这样的控制器实现“多页”登录吗?

最佳做法是什么?

0 投票
6 回答
967 浏览

java - Java作文题

关于组合和面向对象的问题:

我正在尝试为一个类实现更多功能(以 Java TreeMap 为例)。

使用组合是这样做的方法,所以我必须首先创建一个可重用的转发类,它将包装类的功能,同时让它只这样做,以便它可以在其他地方使用未来。

然后,我将继续创建一个包装类,该类继承新创建的 可重用转发类,如下所示:

如果 TreeMap 包含我的类中需要的许多优良特性,那可能不是 NavigableMap 接口的一部分,会发生什么?然后我应该继续为 TreeMap 声明我自己的接口,并在我的可重用类中实现它吗?任何输入在这里表示赞赏。

0 投票
1 回答
530 浏览

inheritance - 平等和哈希码提供者的组合与继承

在比较实体和聚合根时,我使用从 Oren Eini 借来的 ABC:Generic Entity Equality。对于价值对象,我同样巧妙。我使用了 Jimmy Bogard 的 Value Object ABC:Generic Value Object Equality

现在我的问题是;我应该倾向于继承这些 ABC 还是应该使用通用相等/比较器并代替上述行为?我打算重用上述相等实现。

我认为这又回到了 System.Object 具有默认的 Equals 实现,这使得该语言非常易于使用,但也提供了有趣的难题。Jon Skeet 在这里详细介绍:比较方法

任何人都可以想到任何优点或缺点吗?

  • 继承 ABC 更容易,并提供开箱即用的运算符重载。
  • 我应该这么“拖”两个抽象类吗?它使我的继承图更复杂/增加了耦合。
  • 我可以使用 DI 来组成平等提供者吗?

总而言之,有没有人有使用实体的自定义相等实现的经验?我的目标是更全面地了解实施选择并实施解决方案,这将延长项目的生命周期(减少熵)并提高可维护性。

0 投票
8 回答
959 浏览

oop - “有一个”与“是一个”——决定的代码味道

我昨天在继承自 Bar 的类 Foo 中写了这个:

随后想知道这是否可能表明我应该使用Bar,而不是从它继承。

还有哪些“代码气味”可以帮助在继承和组合之间进行选择?

编辑我应该补充一点,这一个片段,还有其他共同的方法,我只是不想太详细。我必须分析切换到作曲的含义,并想知道是否还有其他“代码气味”可以帮助打破平衡。

0 投票
2 回答
2082 浏览

php - 如何将句子中的单词组合成组合词?

我有一句话,例如

John Doe 去年搬到了纽约。

现在我将句子分成单个单词,我得到:

array('John', 'Doe', 'move', 'to', 'New', 'York', 'last', 'year')

这很容易。但是后来我想组合单个单词来获得所有组合的术语。如果组合的术语有意义,那么我想得到所有这些。该操作的结果应如下所示:

约翰,能源部,约翰能源部,移动,能源部移动,约翰能源部移动,到,移动到,能源部移动到......

单词应该由 k 部分的限制组成。在上面的示例中,限制为 3。因此一个术语最多可以包含 3 个单词。

问题:如何在 PHP 中编写组合代码?如果我有一个函数,它将一个句子作为输入并给出一个包含所有术语的数组作为输出,那就太好了。

我希望你能帮助我。提前致谢!

0 投票
6 回答
8343 浏览

inheritance - 可测试性的继承与组合

在设计我的对象时,我发现从可测试性的角度来看,组合是一个更好的选择。原因是,如果需要,我可以在运行单元测试时模拟部分组合结构。如果我有继承层次结构,这是不可能的。

我想知道其他人是否也发现这是更喜欢作曲的原因。另外,由于使用了继承,您还遇到了哪些其他可测试性陷阱?

0 投票
2 回答
200 浏览

oop - Terminology - parts of a composite relationship

Assume I have a composite relationship, say a Customer having a collection of Orders (and assuming an Order cannot exist without an "owning" Customer.) So, I'm not talking about aggregation.

What terms are used to describe the roles in this relationship? I might say the Customer is the "owner" of an Order and maybe the Order is "owned", but surely there are better terms, terms that can be stated without referring to the other role.

I'm trying to determine these terms so I can propertly name attributes in a meta model. I can "make something up", but would like to use names that will be easily understood.

Thanks in advance for suggestions and/or pointers to definitive sources.

Bill

0 投票
1 回答
764 浏览

c# - 你如何建模一个简单的组合关系

有人可以帮助我了解如何最好地模拟组合关系吗?

例如,如果我有一个可以有很多时间表的学生,我会大致创建:

在某个地方,我可能有一个 Schedule 对象,并希望确定它属于哪个学生。我希望能够写作Schedule.Student.Name,并收到学生的名字作为回报。我是否也将 Student 属性添加到我的 Schedule 对象?

我的应用程序一直在将 Student Pk 传递给我的 Schedule 对象以执行 CRUD 功能。我将 Student PK 保留为私有变量,以便在需要时对其进行处理。

随着我的应用程序变得越来越复杂,我发现很难维护我一直在做的事情。你对我有什么建议?我还可以咨询什么(书籍/链接)来复习和更好地掌握这些基础知识?

0 投票
4 回答
4359 浏览

c# - 使用组合而不是继承的装饰器模式

我之前对装饰器模式的理解是,你继承Windowwith ,然后在被覆盖的方法中,在调用' 实现上述方法WindowDecorator之前做一些额外的工作。Window类似于以下内容:

然而,这本质上是对装饰进行硬编码,那么如何将其重构为使用组合而不是继承呢?