【问题标题】:How much business logic to utilize at breeze level?在微风级别使用多少业务逻辑?
【发布时间】:2014-12-19 04:43:38
【问题描述】:

我最近开始使用 Breeze.js 和 ASP.NET Web API2。我浏览了几个教程、视频等...但无法真正找到以下问题的正确答案。

您应该在轻而易举的级别执行多少业务逻辑处理,以及您应该在 API 级别执行多少。例如,在使用轻风时,API 所做的只是返回 getall() 或 getbyID() 类型的数据过滤吗?假设我们想通过连接两个表来获得一组记录。通常我们所做的是在服务器端获取所有这些数据并创建一个视图模型并将其推送回客户端。但是有了微风,既然我们可以在客户端管理数据,我们应该这样做吗?

举个例子,比如你有 Employee & Department 表,FkDepartmentID 在 Employee 表中,但在客户端你需要 Department Name。我的问题是是使用微风还是通过 web api itslef 进行此检索。

【问题讨论】:

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


    【解决方案1】:

    假设“业务逻辑处理”是指数据检索选项,我认为没有一刀切的答案。这里有一些用例和方法,使用严格的微风来检索 UI 工作所需的“形状”中的数据:

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

    考虑使用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');
    

    【讨论】:

    • 很好的答案,杰里米。 “业务逻辑”一词总是含糊不清。我们在谈论数据可访问性吗?验证规则?流程?安全?通讯?有些逻辑属于客户端,有些只属于服务器,有些属于两者。这不是我们可以一概而论的事情。我们可以自信地说,你可以把你的逻辑放在合适的地方。 Breeze 并不规定选择,但它确实创造了没有它你可能没有的选择。
    猜你喜欢
    • 1970-01-01
    • 2018-08-09
    • 1970-01-01
    • 2020-09-07
    • 1970-01-01
    • 1970-01-01
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多