是否有任何需要返回完整或部分对象图的API模式?

时间:2012-01-20 16:48:28

标签: c# api design-patterns

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

我们目前传递的想法是:

  1. 许多方法
    在上面的示例中,您有一个名为get_manager()的方法,另一个名为get_manager_deep()
  2. 许多物体
    与1.类似,您有两种方法,一种返回manager,另一种返回manager_with_staff
  3. 数据驱动的API 这里的方法接受某种查询(可能是XML),它确切地定义了你想要的对象类型,并且该方法可能返回与查询匹配的动态对象。
  4. NB。这些示例非常简单,实际上这些方法可能需要指定数据的部分来源 - ActiveDirectory / DB。

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

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

2 个答案:

答案 0 :(得分:2)

在我工作的项目中没有使用任何真正的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 :(得分:0)

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

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

问候。