問題タブ [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 投票する
2 に答える
220 参照

scala - Scala Cake パターンと自己型アノテーション

私はこのブログの例に従おうとしています。例は理解できますが、実装に問題があります。

この例では、完全なデータベース機能が EmailService から隠されることに言及しています。これは私が求めているものですが、これらの特性を正しく実装する方法がわかりません。

これは私が実装しようとしたものです:

MongoDatabase トレイトが実装を要求しなかったため、私には奇妙にfind見えます。ここで何が欠けていますか?EmailServicefindEmailService

あなたのコメントを読んだ後、私が実際にやろうとしていることにより近い例で、理解しようとしていることを実装しようとしています。

最初のスニペットはコンパイルされませんが、2 番目のスニペットはコンパイルされます... 結局のところ、Repository依存しているデータベースを切り替えることができるさまざまな実装が必要です。


0 投票する
0 に答える
134 参照

scala - フィールドの問題をオーバーライドするScalaの自己型エイリアス名

自己型エイリアス名が拡張クラス フィールドを「オーバーライド」し、コンパイラがそれを示さない場合に問題が発生しました。

akka アクターを使用した私のシナリオ:

selfエイリアス名を使用する場合。MyActorから他のアクターにメッセージを送信すると、送信者は になりdeadLettersます。代わりに別のエイリアスを使用すると、self正常に動作します。

!メソッドは暗黙的に Actor クラスの self フィールドを取得する必要があると思いますが、エイリアスによって隠されていますself

私の意見では、クラスを拡張する場合に自己型エイリアス名を使用するのは危険です。

私の質問: なぜコンパイラは重複したエイリアス/フィールド名について通知しないのですか? または、この問題をどのように処理しますか?

0 投票する
1 に答える
126 参照

scala - Scala Cake パターン: 依存関係の衝突を回避するには?

私の質問はScala Cake Pattern と Dependency Collisionsに非常に似ています。しかし、ダニエル C の回答で提案されているように、具体的な解決策を見つけるのに苦労しています。

だからここに問題があります:

A ProductDetailsPage(特性) には、2 つの独立したサービス モジュールProductServiceModuleおよびが必要で、それぞれ およびSessionModuleによって実装されます。ProductServiceModuleWsSessionModuleWs

両方のモジュールは に依存していRestServiceConfigurationProviderます。

このRestServiceConfigurationProviderの場合、使用可能な具体的な実装は 1 つだけです: DefaultRestServiceConfigurationProvider(atm)。

一方、は、どちらが aまたは aであるかDefaultRestServiceConfigurationProviderによって異なります。RestEndpointProviderHybrisEndpointProviderProductServiceEndpointProvider

つまり、リモート RESTful Web サービスに接続しますProductServiceModuleWsSessionModuleWs特定のサービスの正確な IP アドレスは、RestEndpointProvider の実装によって提供されます。

さて、ここで衝突が発生します。以下のコードを試してみてください。依存関係の衝突が発生する厄介な場所はコメントでマークされています。

RestEndpointProvider当然のことながら、コンパイラは の 2 つの競合する実装、つまりHybrisEndpointProviderとについて不平を言います。ProductServiceEndpointProvider

ダニエルが彼の答えで述べたように、そのような衝突を避けるために、それぞれ独自の具体的な RestEndpointProvider 実装を使用して、ProductServiceModuleWsと を別々に配線する必要があります。SessionModuleWs

しかし、ここで行き詰まりました。

ProductDetailsPageこれらの 2 つの個別に構成されたモジュールを、依存関係の衝突を回避しながらケーキ パターンを利用しながら、どのように挿入することができるでしょうか?

これがサンプルコードです。コードは自己完結型であり、IDE で実行する必要があります。

0 投票する
1 に答える
121 参照

scala - Play フレームワークが提供するコンポーネントにケーキパターンベースの DI を使用することはできますか?

Cake パターンを使用した DI に関連する投稿をいくつか見ました。

そのうちの 1 つはhttp://jonasboner.com/real-world-scala-dependency-injection-di/で、同僚の 1 人が共有しています。

しかし、Play 2.5 の WSClient などを使用する必要がある場合、偽装せずにこれを手に入れることはできますか?

0 投票する
0 に答える
50 参照

scala - Cake パターンでカプセル化を強制する方法

私は Scala の Cake パターンについて少し読んでいました (それが古いものであることは知っています)。具体的なクラスをロックダウンする方法を見たり想像したりできないため、依存関係が注入されたクラスから漏れることはありません。 .

シンプルで最新の例は、play-reactive-mongo-dbアクティベーター テンプレートからのものです。そのアプリでは、コントローラーはReactiveMongoComponentsトレイトを使用して driver のインスタンスを取得しますReactiveMongoApi

ここでの問題は、コントローラーの継承がインスタンスを返すパブリック メソッドを持っていることでreactiveMongoApiあり、カプセル化と情報隠蔽という 2 つの基本原則を破っています。この例が良くないことはわかっていますが (コントローラーはデータ ストアにアクセスしてはならないため)、ドメイン サービスやリポジトリが存在する場合にも同じことが当てはまります。これらのクラス (ドメイン サービス、リポジトリなど) には、アクセス可能なメソッドを定義する特性があり、依存関係を取得するためのパブリック メソッド/属性がないことはわかっていますが、具体的な実装はリークします。

TL;DR: Cake パターンは具体的な実装から依存関係をリークします。これを回避するにはどうすればよいですか?

0 投票する
2 に答える
69 参照

spring - Scala のオブジェクト コレクターのような Spring フレームワークと Java

Spring フレームワークと Java の世界では、私が使用する興味深いオブジェクト コレクター パターンがあります。たとえば、以下を検討してください-

これで、Spring DI を使用して別のクラスに簡単に注入できます

今の問題は、同じことをscalaでどのように達成できるかわかりません。私はいくつかの検索を行って、scala で使用されているケーキ パターン ( http://loicdescotte.github.io/posts/scala-di/ ) を見つけましたが、上記のようなオブジェクト コレクターと同じことを達成していないようです。また、ケーキパターンで違反されると思われるオープンクローズの原則に従いたいのですが、オブジェクトコレクターを使用すると簡単に達成できます。

scala での実装のように同じオブジェクト コレクターを実現する方法はありますか?

0 投票する
0 に答える
37 参照

scala - Scala - 直接継承されたクラスまでのアクセス可能なメンバー

Cake パターンを使用して、直接継承されたトレイトのみがアクセスできるメンバーを設定できます

access modifierではなくを使用して、このメンバーアクセスロジックを適用したいself annotation

例えば、

解決策はありますか?

0 投票する
2 に答える
68 参照

scala - Cakeパターンの別のコンポジションで依存オブジェクトを再利用する方法

以下のような2つのサービスクラスがあります...

ユーザーサービス:

グループサービス:

グループの所有者が有効なユーザーであるかどうかを検証しているだけです。そのために、ハードコーディングされた Dao 実装、つまり UserMySqlDao で userService.read メソッドを再利用しました。
ここで私の質問は、ハードコードされた Dao Impl を提供する代わりに、グループサービスの dao オブジェクトをどのように使用できるかということです。UserService と GroupService のタイプが同じであるためです。

私は以下を使用してみました

しかし、これは失敗しました。私はscalaが初めてなので、なぜこれが失敗したのかよくわかりません。これが合法ではない理由を誰かが明らかにしてくれると助かります。

前もって感謝します :)