POCO类的降级

本文关键字:降级 POCO | 更新日期: 2023-09-27 18:28:10

我有一组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,下变频通常是违反设计原则的。相反,我们应该使用虚拟函数。但在POCO类中,我们并没有真正的虚拟行为(只有额外的字段)。

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

POCO类的降级

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与否,我都会赞成三种网络方法。