c# – 何时使用TableController以及何时使用自定义DomainManager

我想弄清楚什么时候有一个自定义域管理器是有意义的.最初,每当我们在TableController< T>中有一个非T类型的返回类型时,我就会很难我们需要创建一个新的自定义DomainManager.

但是,在示例应用程序Sport by Xamarin中,它们的控制器继承自TableController< Athlete>,但是它们的GET方法返回IQueryable< AthleteDto>

public IQueryable<AthleteDto> GetAllAthletes()
{
     return ...;
}

注意:AthleteDto继承自EntityData

如果这是允许的,那么为什么我会遇到创建新DomainManager的麻烦?

如果我的返回值没有从EntityData继承,我是否只需要创建一个新的DomainManager?

最佳答案 您应该为要连接的每种数据源创建一个新的DomainManager.例如,Azure Table Storage有一个内置的域管理器,使用Entity Framework有一个用于SQL Azure的域管理器.

您的数据类型需要从EntityData继承或实现接口ITableData才能使用TableController< T>.这与域管理器问题无关.

对于您引用的示例,允许在域管理器和控制器方法的返回类型之间使用不同的类型,但它可以使代码更复杂.这是因为基类方法将返回DTO类型,您现在必须转换为其他类型.请注意,该示例中的Athlete和AthleteDto类型都继承自EntityData,因为它们都具有超类AthleteBase.

点赞