日付に基づいてUI(または他の)機能をオンまたはオフにしますか?


11

ASP.NET 2.0で書かれたひどいシステムがあり、いくつかの機能を追加する必要があります。問題は、特定の製品には特定の日付以降に開始されたビジネスでオンにする必要がある(および他のサービスがオフになっている)UI機能があり、既存のビジネスではページが同じように表示される必要があることです。

私は本能的に日付ベースのJavaScript UIスイッチのアイデアと、古いビジネスと新しいビジネスのWebコントロールの混合が「だらしない」(より良い言葉が欲しいため) )。

時間ベースのUI機能を持つ慣行は広く受け入れられている慣行ですか?そうでない場合、その行動方針を追求する既知のリスクは何ですか?


13
特定の期間内を除き、ユーザーがビジネスドメインの要件で特定の機能を使用できないように指定している場合、それは「設計による」ものです。uxコントロールの表示と非表示のアイデアが気に入らない場合は、非表示にするのではなく無効にします。とにかく、この手法は完全に有効です。
ロバートハーベイ

1
「特定の日付以降に開始されたビジネス」という語句は不明瞭です。会社とのビジネス(特定の日付以降にサインアップする顧客向け)またはクライアントと開始されるビジネス(クライアントが特定の日付以降にサインアップする場合クライアントはアプリ内のデータを使用して特定のことのみを行うことができます)を意味しますか?前者の場合、顧客が利用できる機能について話しています。後者の場合、特定のデータに対する無効なアクションの制限について説明しています(データ自体の条件に基づいて)。これらの状況では、答えが大きく異なる場合があります。
jpmc26

回答:


22

顧客に対して有効になっている機能、または選択した展開タイプに基づいてUIを微調整することには何の問題もありませんが、変更は

  1. 意味のあるフラグ、たとえば、 "HAVE_EXPORT"に依存して、奇妙な日付の比較ではなく、エクスポートオプションを有効/無効にします。UIには、いつ発行されたかに関するビジネスルールを知っているビジネスはありません。UIタスクのみを実行し、UI固有の指示に従う必要があります。
  2. 顧客が支払っていない機能をひそかに有効にできないように、サーバー側で制御します。

-反対のこと(注DIS一定時間後にabling機能は-あなたは明確にあなたは時間限定の試用版を販売していることを伝えていない限り、主要なノーノーであるように作成する。時限爆弾を他の状況下では、人々が嫌いになりますあなたは他のほとんど何よりも速くなります。)


2
The UI has no business knowing the business rule about what was published when-わかりましたが、Stack ExchangeにもそのようなUIルールがあります。たとえば、2日が経過するまで非表示の質問の他のユーザーには「削除」リンクは表示されず、60日後に移行オプションが無効になります。
ロバートハーヴェイ

この答えに基づいて質問を明確にしました。日付に応じて、いくつかのコントロールが削除され、他のコントロールが追加されます。
NMrt

13
@RobertHarvey、しかしビューでどのようにプログラムされていますか?if (showDelete) { <button>delete</button> }またはのようなものですかif ((post.date - today).days > 2) { <button>delete</button> }
アルトゥーロトーレスサンチェス

@ArturoTorresSánchez:前者-全体のアイデアは、ビジネスロジック(日付計算など)をサーバーに配置することです。とにかく、これはそれ自身の良い質問をするでしょう:-)。
-sleske

11

要件自体に問題はありませんが、実装する良い方法と悪い方法があります。次のような場所にコードをコピーして貼り付けた場合:

if (businessInitiationDate > cutoffDate)
  enableNewControlsForThisOneLittlePiece();
else
  enableOldControlsForThisOneLittlePiece();

たとえそれが今より速く見えたとしても、それは維持するのが難しいです。たとえば、ある時点で、一部の古い顧客は新しい外観を望みます。ある時点で、独自のカットオフ日付を持つ3番目の構成があるかもしれません。

理想的には、このifステートメントをコード内で、できればサーバー側で1回だけ表示することが望まれます。ただし、アプリケーション全体を複製して変更を加えることも避けたいです。共通のコードを見つけ出し、それを分解して、異なる部分だけに小さな別個の関数を作成します。次に、これらの機能を1つの中央の場所から有効または無効にします。


6

それは要件であり、臭いのように見えますが、基本的には日時値に基づいた構成ですが、UIを変更するために時間を使用できない理由はありません。古典的なケースは、昼間の明るい色から夜の暗いテーマに変化するsatnavディスプレイです(もしあなたが本当に熱心なら、その間は落ち着いた色になります)。

ただし、改善策として提案できることの1つは、コントロールを有効にする日付の概念ではなく、バージョン番号を削除することです。このバージョンはUI構成を設定します(つまり、NewCustomer用に構成されたというフラグがあり、将来、NewNewCustomerが必要とする追加のコントロールに対応するように拡張できます)。これは、コードでの処理がはるかに簡単で、より良い匂いがします。

その後、いくつかの基準に基づいてバージョン番号を設定する問題が1つだけあり、これは今日の日付チェック、おそらくサーバー側の設定オプション、またはユーザーログインで設定されたCookieで行うことができます未来。


5

これは、より一般的な質問の特殊なケースのように感じます。事前定義されたルールに従って、特定の理由でUI機能を無効にすることは悪い習慣ですか?したがって、答えは「もちろんではありません」です。日付と時刻は難しいため、特に日付の処理は難しい場合がありますが、一般的な原則として、ビジネス要件が要求するものである場合、それを行わない正当な理由はありません。


3

変更が日付に依存する特定のビジネス目的に関係している場合、それは必要な悪です。

これがプログラムを永続的に変更するリビジョンを展開することであり、古いデザインが二度と使用されない場合は、正しいタイミングで更新を展開する方が良いでしょう。


1
「正しい時間に更新プログラムを展開する方が良い」Nitpick:必ずしもそうではありません...。たとえば、展開にはダウンタイムが必要になる場合がありますが、これは切り替えが必要なときに実用的ではありません。または、並列使用の期間があるかもしれません...それは本当に依存しています。
sleske

または、クリスマスに「ジングルベルを鳴らす」ボタンが必要な場合があります。これをクリスマスごとに展開する必要はないかもしれません。
-sixtyfootersdude

2

いいですね。UIをさまざまなユーザーに適応させることは非常に一般的です。たとえば、stackoverflowでは、個々のユーザーのカルマに基づいてさまざまな機能が有効または無効になります。

気に入らないのは、誰もが同じUIを見るソリューションに比べて明らかに複雑さが増すからです。しかし、複雑さは本質的な複雑さのようです。それは、ビジネス上の要件であり、悪いアーキテクチャ決定の成果物ではありません。もちろん、コストがかかります(ビジネスに伝える必要があります)が、ビジネスがコストの価値があると判断した場合は、それを実装します。

既知のリスク:最大のリスクは、おそらくさまざまな構成でUIをテストすることです。さまざまなユーザーグループに対してUI機能を有効/無効にするという道を歩み始めると、可能な構成の爆発をすぐに得ることができます。

また、ビジネスロジックレイヤーに制限を実装することも確認する必要があります。そうすることで、UIがそもそも不可能になったとしても、顧客が許可されていない操作を実行できないことを確認できます。


はい、UIがさまざまな要因に基づいて変化する可能性がある場合、テストは非常に難しいです。実行する必要がある場合は実行する必要がありますが、バリエーションを最小限に抑えるのに役立ちます。また、現在の日付などに関係なく、テスト用にUIを切り替える方法を提供します。
sleske

2

あなたが説明しているのは効果的なデートの概念です。これは決して斬新なアイデアではなく、その中核は時間的パターンを適用できる時間的問題のタイプです。

基本的に、データベースで行うことは、フォームモジュールまたはフォームバージョン(ここではコンポーネントと呼びます)のいずれかに発効日を適用し、それらのコンポーネントとそれらの発効/終了日に関するメタデータを保存することです。もちろん、アプリケーション内のユーザーに関するデータも必要です。

このアプリケーションを書き直すことを検討するより魅力的な理由があるかもしれません。効果的なデートの問題があなたの唯一の問題であるなら、私はおそらく効果的なデートの実装がより良い選択肢であることをお勧めします。そうでない場合は、シナリオに基づいて評価する必要があります。


1

これは、日付に基づいたアクティベーションによる機能の切り替えです。これは完全に有効です。機能がプロモーション期間中にのみ使用されるものであったか、特定の日付で新しい政府規制が発動したときに終了しなければならなかったと想像してください。

APS.NETとJavaScriptで作業していますが、Java機能切り替えフレームワークTogglzには、具体的には日付(および時間!)ベースのアクティベーションルールがあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.