0

我有一组 POCO 课程:

class ReportBase
{
    public string Name { get; set; }
    public int CustomerID { get; set; }
}

class PurchaseReport : ReportBase
{
    public int NumberOfPurchases { get; set; }
    public double TotalPurchases { get; set; }
    public bool IsVip { get; set; }
}

class SaleReport : ReportBase
{
    public int NumberOfSales { get; set; }
    public double TotalSales { get; set; }
}

我有一个返回 ReportBase 的 web 方法。调用者使用返回值根据实际类型通过向下转换和检查类型(一个网格用于销售,一个网格用于购买)来更新 UI(WPF)。有人建议使用三个 web 方法,每个方法都返回特定的类型。

我知道通过引入 if/else,downcast 通常是违反设计原则的。相反,我们应该使用虚函数。但是在 POCO 类中,我们并没有真正的虚拟行为(只有额外的字段)。

在这种情况下,你是支持还是反对沮丧,为什么?

4

1 回答 1

1

IMO 一切都与意图有关。只返回基类并没有说明什么,特别是当你返回它只是为了节省一些击键。作为开发人员,您更喜欢什么?

ReportBase GetReport() // if type==x downcast.
//or
PurchaseReport GetPurchaseReport()
SaleReport GetSalesReport()

您想使用什么方法使代码更易于维护?检查类型和向下转换毕竟是一个实现细节,你可能有这样的方法

public void AssignReport(ReportBase report)
{
    //check, cast and dispatch to the suitable UI
}

这有什么问题?它缺乏透明度,并且这种方法应该始终知道哪些 UI 元素需要哪些报告。任何时候添加/删除元素都必须修改此方法。

我认为像这样的东西非常清晰和可维护

salesGrid.DataSource=repository.GetSalesReport();
purchaseGrid.DataSource=repository.GetPurchaseReport();

比这个

var report=repository.GetReport();
AssignReport(report); //all UI elements have their data assigned here or only 2 grids?

所以我认为,无论是否 POCO,我都会支持三种 Web 方法。

于 2012-03-16T12:52:29.960 回答