在微风层面使用多少业务逻辑?

时间:2014-12-19 04:43:39

标签: javascript asp.net-web-api2 breeze

我最近开始使用Breeze.js和ASP.NET Web API2。我接下来经历了几个教程,视频等......但是无法找到对以下问题的正确答案。

您应该在微风级别执行多少业务逻辑处理,以及在API级别应该执行多少操作。例如,当使用breeze时,API所做的就是返回getall()或getbyID()类型的数据过滤?让我们说我们希望通过连接两个表来获得一组记录。通常我们所做的是在服务器端获取所有这些数据并创建一个viewmodel并将其推送回客户端。但是随着微风,我们可以在客户端管理数据,我们应该这样做吗?

举例说明你有员工和员工的地方。部门表,在Employee表中使用FkDepartmentID,但在客户端,您需要部门名称。我的问题是,是使用breeze还是通过web api itslef进行检索。

1 个答案:

答案 0 :(得分:3)

假设"业务逻辑处理"指的是数据检索选项,我不认为这是一个通用的答案。这里有一些使用案例和方法,使用严格的微风来检索"形状"用户界面工作需要的是:

我想显示一个员工实体,包括他们部门的名称。

考虑使用single relation expand加载员工。这将确保部门与员工一起加载,从而可以通过employee.Department.Name属性访问部门名称。

var query = EntityQuery.from('Employees')
    .where('EmployeeId', '==', 22)
    .expand('Department');

我想使用表单编辑员工实体,使用<select>元素来选择他们的部门。

考虑加载员工而不扩展其部门。另外,加载lookup list部门实体,以便您可以创建选择元素的选项。

我想显示员工的只读列表。

考虑使用projection query来获取具有您需要显示的属性的对象数组。

var query = EntityQuery.from('Employees')
    .where('LastName', FilterQueryOp.StartsWith, 'C')
    .select('FirstName, LastName, Department.Name')
    .orderBy('LastName');