2009-10-22 3 views
0

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

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

ответ

2

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

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

     //Common methods for construction of query 
    } 
+0

ОК. Хорошая идея ... Позвольте мне попробовать. Благодаря! – Vijay

Смежные вопросы