问题标签 [cake-pattern]

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 投票
0 回答
355 浏览

scala - Haskell 中缺少蛋糕模式吗?为什么以及何时需要在 Haskell 中使用 Cake Pattern?

阅读这个问题Reddit 上的这个帖子启发我问:

为什么 Haskell 社区的人们似乎没有错过 Scala 的蛋糕模式?为什么 Haskell 中缺少蛋糕模式(或繁琐)不是一个大问题?

蛋糕模式旨在帮助大型(可扩展)系统/程序。使用 Scala 创建的系统是否可能比使用 Haskell 创建的系统大得多?这反过来又可以解释为什么蛋糕模式在 Scala 世界中如此重要,而它的缺乏在 Haskell 世界中并不是一个大问题?

0 投票
2 回答
220 浏览

scala - Scala 蛋糕模式和自我类型注释

我正在尝试遵循此博客中的示例。我理解这个例子,但在实施它时遇到了麻烦。

该示例提到完整的数据库功能将从 EmailService 隐藏 - 这是我所追求的,但不知道如何正确实现这些特征。

这是我试图实现的:

对我来说这看起来很奇怪,因为 MongoDatabase trait 没有要求find实现,当我实现时,EmailService我被提示find实现,尽管示例提到这将从EmailService. 我在这里想念什么?

阅读您的评论后,我正在尝试在一个更接近我实际尝试做的示例上实现我正在尝试理解的内容。

第一个片段不会编译,但第二个片段会......在一天结束时,我想要有不同的Repository实现,我可以在他们依赖的数据库之间切换,我是否接近下面的片段之一?


0 投票
0 回答
134 浏览

scala - Scala自类型别名覆盖字段问题

当自我类型别名“覆盖”扩展类字段并且编译器没有指出它时,我遇到了一个问题。

我与 akka 演员的场景:

如果我使用self别名。我向其他参与者发送消息MyActor,发件人变为deadLetters. 当我使用不同的别名而不是self它时工作正常。

我想!方法隐式必须采用 Actor 类的 self 字段,但它被self别名隐藏了。

在我看来,如果你扩展一个类,使用自我类型别名是危险的。

我的问题:为什么编译器不告诉重复的别名/字段名称?或者如何处理这个问题?

0 投票
1 回答
126 浏览

scala - Scala Cake Pattern:如何避免依赖冲突?

我的问题与Scala Cake Pattern 和 Dependency Collisions非常相似。但我正在努力寻找 Daniel C 的回答中建议的具体解决方案。

所以这里是问题:

A ProductDetailsPage(trait) 需要两个独立的服务模块ProductServiceModuleSessionModule,分别由ProductServiceModuleWs和实现SessionModuleWs

这两个模块都依赖于RestServiceConfigurationProvider.

为此RestServiceConfigurationProvider,只有一个具体的实现可用:DefaultRestServiceConfigurationProvider(atm)。

DefaultRestServiceConfigurationProvider另一方面取决于RestEndpointProvider哪个可以是 a或HybrisEndpointProvideraProductServiceEndpointProvider

简而言之,ProductServiceModuleWsSessionModuleWs连接到远程 RESTful Web 服务。特定服务的确切 IP 地址由 RestEndpointProvider 的实现提供。

现在,这就是发生碰撞的地方。随意尝试下面的代码。发生依赖冲突的麻烦地方由注释标记。

理所当然地,编译器抱怨 的两个相互冲突的实现RestEndpointProvider,即HybrisEndpointProviderProductServiceEndpointProvider

正如丹尼尔在他的回答中提到的那样,为避免任何此类冲突,我应该分别连接ProductServiceModuleWsand SessionModuleWs,每个都有自己的具体 RestEndpointProvider 实现,也许像这样

但这是我卡住的地方。

现在如何将这两个单独配置的模块注入到ProductDetailsPage避免依赖冲突中,但仍然使用蛋糕模式?

这是示例代码。该代码是自包含的,应该在您的 IDE 中运行。

0 投票
1 回答
121 浏览

scala - 是否可以将基于蛋糕模式的 DI 用于 Play 框架提供的组件?

我看过一些与 DI 相关的帖子,它们使用蛋糕模式。

其中之一是我的一位同事共享的http://jonasboner.com/real-world-scala-dependency-injection-di/ 。

但是,如果我需要使用 Play 2.5 中的 WSClient,我可以在不求助于 guice 的情况下掌握它吗?

0 投票
0 回答
50 浏览

scala - 如何使用蛋糕模式强制封装

我一直在阅读一些关于 Scala 中的蛋糕模式(我知道那是旧东西),我看不到或想象一种锁定具体类的方法,因此依赖项不会从注入它们的类中泄漏.

一个简单且最新的示例来自play-reactive-mongo-db激活器模板。在该应用程序中,控制器使用ReactiveMongoComponentstrait 来获取驱动程序的实例ReactiveMongoApi

现在,问题是控制器继承了一个公共方法来返回一个实例,reactiveMongoApi因此打破了两个基本原则:封装和信息隐藏。我知道这个例子不是很好(因为控制器不应该访问任何数据存储),但如果有域服务或存储库,同样适用。我知道这些类(域服务、存储库等)将具有定义可访问方法的特征,并且不会有公共方法/属性来获取依赖项,但具体实现确实泄漏。

TL;DR:Cake 模式从具体实现中泄漏依赖关系,如何避免这种情况?

0 投票
0 回答
590 浏览

scala - 使用 Cake Pattern 的依赖注入与在构造函数中传递参数

读完这篇博文后,我不明白:

使用自类型注释与为依赖注入指定构造函数参数有什么区别?

换句话说,这种风格有什么区别:

和这个:

而这个(第三个选项):

?

有没有(超出语法)?(必须有,否则自类型注释将不存在)。

编辑:

似乎是相关的问题,尽管它没有回答这个问题。

也是相关的,所以这两种风格基本上没有区别?

0 投票
2 回答
69 浏览

spring - Spring框架和Java类似Scala中的对象收集器

在 Spring 框架和 Java 世界中,我使用了一种有趣的对象收集器模式。例如考虑下面 -

现在这可以很容易地使用 Spring DI 注入另一个类

现在的问题是我不确定如何在 scala 中实现相同的目标。我做了一些搜索,发现了 scala 中使用的蛋糕模式(http://loicdescotte.github.io/posts/scala-di/),但这似乎与上面的对象收集器没有相同的效果。我也想遵循我认为在蛋糕模式中被违反的开闭原则,但使用对象收集器我可以轻松实现它。

有没有办法像在 scala 中实现一样实现相同的对象收集器?

0 投票
0 回答
37 浏览

scala - Scala - 直接继承类的可访问成员

使用 cake 模式,我们可以设置一个成员只能被直接继承的 trait 访问

我想使用access modifier而不是应用此成员访问逻辑self annotation

例如,

有什么解决办法吗?

0 投票
2 回答
68 浏览

scala - 如何在蛋糕模式的另一个组合中重用依赖对象

我有两个服务类,如下所示......

用户服务:

团体服务:

我只是在验证组的所有者是否是有效用户。为此,我将 userService.read 方法与硬编码的 Dao 实现(即 UserMySqlDao)一起使用。
在这里,我的问题不是提供硬编码的 Dao Impl,而是如何使用 groupservice 的 dao 对象。因为 UserService 和 GroupService 的类型相同。

我尝试使用以下

但这失败了。因此,我是 scala 的新手,不太清楚为什么会失败。如果有人可以说明为什么这是不合法的,那将很有帮助。

提前致谢 :)