ИМО это все о намерениях.Возврат только базового класса ничего не говорит, тем более, что вы возвращаете его только для сохранения некоторых нажатий клавиш.Как разработчик, что вы предпочитаете:
ReportBase GetReport() // if type==x downcast.
//or
PurchaseReport GetPurchaseReport()
SaleReport GetSalesReport()
Какой подход вы хотели бы использовать, чтобы сделать код более понятным?В конце концов, проверка типа и обратное преобразование - это деталь реализации, и у вас, вероятно, есть такой метод
public void AssignReport(ReportBase report)
{
//check, cast and dispatch to the suitable 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 или нет, я предпочтуподход веб-методов.