Что у меня есть?
У меня есть абстрактный класс QueryExecutor
и многие классы, унаследованные от него, я только что дал два из них. Логика построения результирующего объекта одинакова, но каждый унаследованный класс возвращает свою коллекцию - некоторые из них находятся в System.Web.UI.WebControls
пространстве имен, а некоторые являются пользовательскими классами коллекций.
abstract class QueryExecutor
{
abstract object Execute();
//Common methods for construction of query
}
class SqlQueryExecutor : QueryExecutor
{
public object Execute()
{
ProfileNodeCollection nodes = new ProfileNodeCollection();
//Construct nodes
return nodes;
}
}
class CamlQueryExecutor : QueryExecutor
{
public object Execute()
{
TreeNodeCollection nodes = new TreeNodeCollection();
//Construct nodes
return nodes;
}
}
Что я хочу?
Я думал о фабрике, которая создает соответствующий дочерний класс и возвращает результат. В приведенном выше дизайне мне нужно привести результат, полученный методом QueryExecutor.Execute()
. Что я не хочу делать.
С какой проблемой я сталкиваюсь?
Поскольку возвращаемые типы различаются в дочерних классах (а некоторые в System.Web.dll
), подходит ли вышеуказанный дизайн для этой проблемы?
Есть ли другой подход, которому я должен следовать?