API是否有任何模式';s,需要返回完整或部分对象图

本文关键字:返回 对象图 任何 是否 模式 API | 更新日期: 2023-09-27 18:20:59

是否有任何模式/解决方案可以解决API调用的问题,在一种情况下,该调用可能需要返回完整的对象图(比如manager对象及其所有员工关系),而在另一种情况中,可能只返回单个manager对象?

我们目前传递的想法是:

  1. 多种方法
    在上面的例子中,有一个方法叫get_manager(),另一个叫get_manager_deep()
  2. 许多对象
    类似于1。有两个方法,一个返回manager,一个则返回manager_with_staff
  3. 数据驱动的API
    在这里,该方法接受某种查询(可能是XML),该查询准确地定义了您想要返回的对象类型,并且该方法可能返回与查询匹配的动态对象

注:。这些示例非常简单,实际上,这些方法可能需要指定部分数据的来源——ActiveDirectory/DB。

有人遇到过这样的问题吗?

编辑-设计的主要驱动力是拥有一个干净、简单(但有效)的API和对象模型。因此,上面的一些示例会导致潜在的大型(并且可能令人困惑)对象图。拥有太多(希望是不必要的)方法/类可能是一个维护问题。

API是否有任何模式';s,需要返回完整或部分对象图

在我参与的一个没有使用任何真正ORM的项目中,我们解决了这样的问题:

class Manager { 
  public List<Employee> Staff { get;set;} // Not populated by default.
}
interface IEmployeeDataAccess {
  List<Staff> GetStaffForManagers(int[] managerIds);
}

然后创建了可以填充对象图的构建器类:

new ManagerBuilder().From(managers).WithEmployees(employeeDataAccess).Build();

建筑商可以被锁在一起:

new ManagerBuilder()
  .From(managers)
  .WithEmployees(employeeDataAccess, employeeBuilder => 
    employeeBuilder.WithLeaveRequests())
  .Build();

允许我们尽可能少地访问数据库来获取所需的数据量。

您应该尝试根据需要创建一个。。你只需要两个概念。。1.方法链接2.递归

维基百科上一篇关于方法链接的好文章http://en.wikipedia.org/wiki/Method_chaining

谨致问候。