Проблема проектирования - общий базовый класс и разные типы возвращаемых данных - PullRequest
0 голосов
/ 22 октября 2009

Что у меня есть? У меня есть абстрактный класс 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), подходит ли вышеуказанный дизайн для этой проблемы?

Есть ли другой подход, которому я должен следовать?

1 Ответ

2 голосов
/ 22 октября 2009

Почему бы не использовать дженерики для этого?

abstract class QueryExecutor<T>
    {
        public abstract T Execute();

        //Common methods for construction of query 
    }
...