我的团队已经“受命”创建一个遵循基于任务的 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 界面在编辑时有一个“保存”按钮,您会错过某些更改的“原因”。
例如,将客户的地址从“Fountain St. 55”更改为“Birds St.444”与将其从“Fountain St. 55”更改为“Fountain St. 555”具有相同的语义。刚刚“更新”了这条街。
基于任务的界面具有“操作按钮”,它们“意味着”某些业务。
例如,您可以有一个“正确地址”按钮来表示您正在更改地址,因为它包含一个拼写错误,并且地址实际上“概念上”是相同的,只是现在它可以正确读取。在这种情况下,客户并没有实际移动。
然后您可以执行另一个不同的操作,例如“将客户移动到新地址”,这意味着客户实际上已经搬到了一个新地方,并且地址更改具有所有这些含义。
在 CRUD UI 中 => 您“编辑数据”。
在基于任务的 UI 中 => 您“表明业务发生了”。
第二个总是更强大,虽然更难提前思考,系统必须灵活地添加、承载和传达在业务运营过程中发现的新“意义”。
但是你会得到一个巨大的好处:知道“为什么”事情会发生变异。换句话说……捕捉用户的意图。
Microsoft Money 2000 是 Microsoft 的一个示例(尽管他们称其为Inductive User Interface。以下是基本指南和沿途的一些屏幕截图:Microsoft Inductive User Interface Guidelines
我想我并不真正认为 UI 具有基于任务或基于 CRUD 的外观(尽管 Dmitry 的示例确实展示了基于任务的示例——很多命令)。我更多地看到基于任务的 UI 与底层域和数据模型的交互方式。如果您的交互只不过是一个典型的开箱即用 MVC 应用程序,带有 Get/List/Insert/Update/Delete 的操作方法,那么您正在构建一个基本的 CRUD 应用程序。但是,如果您放弃那些默认的操作方法并创建对应用程序有意义的操作/命令(例如,将商品添加到购物车、停用类等),那么这将更多地进入基于任务的 UI 世界。
我确实认为这是两者之间的一条灰色线。
举个例子,我知道我工作的一个网站 (braincredits.com) 是我对基于任务的 UI 的尝试。这绝对是一项正在进行的工作,我正在对其进行更改以不断改进它,但实现是基于命令的(例如发布到成绩单、添加课程、查看成绩单等),并且它的一部分确实使用了 CQRS 模式.
我希望这有帮助!祝你好运!