私のチームは、タスクベースのUI(必ずしもCQRSを使用する必要はありません)に従うアプリケーションを作成するように「タスク」されています。私はユーザーが一般的なタスクを簡単に実行できるUIが本当に好きですが、このアプリケーションの多くの部分は、典型的なCRUDインターフェイスの仕事のように(私には)本当に「感じ」ます(例:カタログ内の製品のすべての詳細)。
この時点で、何が可能かを理解するのに役立つ、優れたタスクベースのUIの例が必要です。インターウェブで何を見ましたか?
タスクベースのUIを生成する最も簡単な方法は、モデルのすべての属性/プロパティを保護することです。つまり、すべてのセッターを削除します。
これから(擬似コード):
public class TodoTask
{
public Date getDateAssigned();
public void setDateAssigned(Date);
public string getAssignedTo();
public void setAssignedTo(string);
}
これに:
public class TodoTask
{
public Date getDateAssigned();
public string getAssignedTo();
public void AssignTo(string userId);
}
基本的なCRUDアプリを作成することはできなくなりました。Assign()
モデルを更新するには、タスク()を実行する必要があります。
すべてのセッターを削除することから始めて、次に各モデルで実行できるアクション(タスク)の種類を分析します。
これで準備は完了です。
私はそれについてブログを書きました:http://blog.gauffin.org/2012/06/protect-your-data/(CRUDとタスクベースのモックアップを見るには一番下までスクロールしてください)
これはタスクベースのUIとして適格だと思います。
CRUDインターフェイスには、編集時に[保存]ボタンがあり、何かが変更される「理由」を見逃しています。
たとえば、顧客の住所を「FountainSt.55」から「BirdsSt。444」に変更することは、「FountainSt.55」から「FountainSt.555」に変更することとまったく同じセマンティクスを持ちます。通りを「更新」しただけです。
タスクベースのインターフェースには、ビジネスの何かを「意味する」「アクションボタン」があります。
たとえば、「正しい住所」ボタンを使用して、タイプミスが含まれていて、実際には「概念的に」同じ住所であるため、住所を変更していることを示すことができますが、正しく読み取れるようになりました。この場合、顧客は物理的に移動しませんでした。
次に、「顧客を新しい住所に移動する」などの別のアクションを実行できます。これは、顧客が実際に新しい場所に移動し、住所の変更がそのすべての意味を持っていることを意味します。
CRUDUIでは=>「データを編集」します。
タスクベースのUIの場合=>「ビジネスが発生したことを通知」します。
2つ目は常に強力ですが、事前に考えるのは難しく、システムは、事業運営自体の間に発見された新しい「意味」を追加、伝達、伝達するために柔軟でなければなりません。
しかし、大きなメリットがあります。「なぜ」物事が変化するのかを知ることです。言い換えれば...ユーザーの意図をキャプチャします。
Microsoft Money 2000は、Microsoftによる例でした(ただし、Inductive UserInterfaceと呼ばれています。基本的なガイドラインとその過程でのいくつかのスクリーンショットは次のとおりです。MicrosoftInductiveUserInterfaceGuidelines
UIがタスクベースまたはCRUDベースのように見えるとは思いません(ただし、Dmitryの例は、タスクベースであることを示しています-多くのコマンドです)。タスクベースのUIは、基盤となるドメインおよびデータモデルとどのように相互作用するかという観点から見るとわかります。インタラクションが、Get / List / Insert / Update / Deleteのアクションメソッドを備えた、通常のすぐに使用できるMVCアプリケーションにすぎない場合は、基本的なCRUDアプリケーションを構築しています。ただし、これらのデフォルトのアクションメソッドを使用せずに、アプリケーションにとって意味のあるアクション/コマンドを作成する場合(たとえば、ショッピングカートにアイテムを追加する、クラスを非アクティブ化するなど)、これはタスクベースのUIの世界にさらに浸透します。
私はそれが2つの間のかなり灰色の線だと思います。
例として、私が取り組んでいるサイト(braincredits.com)は、タスクベースのUIでの私の試みであることを知っています。これは間違いなく進行中の作業であり、常に改善するために変更を加えていますが、実装はコマンドベースであり(たとえば、トランスクリプトへの投稿、レッスンの追加、トランスクリプトの表示など)、その一部はCQRSパターンを使用します。
これがお役に立てば幸いです。幸運を!