6

Scalaでオブジェクトをエイリアスする「正しい」方法は何ですか?

たとえば、アプリケーションのさまざまな部分 (SBT サブ プロジェクトに分割されている) のスコープに RoleGroup が必要だとします。

trait RoleGroup
object RoleGroup {
  case object ADMIN     extends RoleGroup
  case object MEMBER    extends RoleGroup
  case object PUBLIC    extends RoleGroup
}

RoleGroup を繰り返しインポートしたくないので、RoleGroup の trait と object を type と val の対応するものに次のようにエイリアスすることにしました:

package com.developer
package controller

trait ControllerBase {
  type RoleGroup    = controller.RoleGroup
  val RoleGroup     = controller.RoleGroup
  ...
}

サブプロジェクト パッケージ オブジェクトはヘルパー トレイトを拡張して、インポートを無料で取得できます。

package com.client

package object member
  extends com.developer.controller.ControllerBase

スコープ内にある必要がある他のケースオブジェクトについても同じことをしています。これは賢明な解決策ですか?つまり、知っておく必要がある欠点/問題はありますか? すべてがコンパイルされ、ブラウザのテスト ページはリファクタリング済みのアプリケーションと同じように動作するように見えますが、これが最善の方法かどうかはわかりません。

4

1 に答える 1