2017-01-26 11 views
0

ユーザータイプに応じてフィーチャーを制限/修正する必要がある場合、どのようにソフトウェアのアーキテクチャーを設計しますか?ユーザータイプ別にフィーチャーを分離する最善の方法

  • 無料
  • プレミアム
  • ビジネス

そして、我々は、画像のアップロードのためのAPIを実装している機能:たとえば、私たちは3つのユーザータイプを持って言うことができます。

今トリッキーな部分は次のとおりです。

  • 無料ユーザーは10枚の画像をアップロードすることができます。
  • プレミアムユーザーは100枚の画像をアップロードできます
  • ビジネスユーザーは1000枚の画像をアップロードできます。

私は、リクエストを処理するメソッドで「if」を実行できることを知っていますが、他の同様のケース(ユーザータイプに依存する機能)が多数あるため、この問題に対するより優れたスケーラビリティの高いソリューションです。

アイデア?

答えて

1

多態性を使用することができます。つまり、同じ場合に同じ方法を実装するサブクラスがそれぞれ異なる場合があります。例えば

、あなたはサブクラスFreeUserPremiumUserBusinessUserで、Userクラスを持つことができ、あなたはUser.UploadImageを呼び出す際に、ユーザーの各サブタイプは、異なる制限があります。

基本クラスには、他のすべてのメタ(類似のケース)が含まれます。

+0

はい、これは機能します。しかし私はすでに2種類のユーザーを持っています。 1つはAdmin、もう1つはUserです。また、私は貧血ドメインモデルを使用する悪い決断をしたので、すべてのビジネスロジックはサービスクラスで実装されています。おそらく、各プラン/ユーザータイプのサービスを作成し、そのタイプに応じてユーザーに注入すれば、私はおそらく同じ目的を満たすことができます...私が恐れている唯一のことは、不必要な複雑さを加えることです。どう思いますか? – Frankra

+0

多態性は、「型に基づく条件」の正反対です。https://sourcemaking.com/refactoring/replace-conditional-with-polymorphism – heltonbiker

+0

はい、わかります。そして確かに行く方法です。私はエンティティと現在のアーキテクチャを再構築します。どうもありがとうございました! – Frankra

関連する問題