2009-07-15 11 views
0

シナリオでブリッジパターンを使用するのが良いかどうか、ご意見をお聞きしたいと思います。このシナリオでは、さまざまな検索パラメータを受け入れることができる1つの一般的な検索UIを開発する必要があり、それらのパラメータに基づいて、さまざまなサービスを呼び出す必要があります。例:パラメータがFIN番号でPersonの名前である場合、検索するにはPersonServiceを呼び出す必要があります。このシナリオでBridgeを使用しますか?

タイプセーフであるために、抽象と実装が独立して機能できるブリッジパターを使用することを考えています。

以下のコードを実装した後、私もそのパターンは、このためにもスイートではありません。このシナリオでは、そのパターンを使用するために自分自身を強制していますように私は感じて...君たちは

どう思いますか?それを改善するためにコードを変更する方法はありますか?このパターンはこのシナリオではまったく使用できません。

抽象クラスSearchEngine { public abstract IList Query(); }

class PersonSearchEngine : SearchEngine<Person> { 

    private DataQuery<Person> dataQuery; 

    public PersonSearchEngine(DataQuery<Person> dataQuery){ 
     this.dataQuery = dataQuery; 
    } 

    public string FIN { set; get; } 
    public string Name { set; get; } 

    public override IList<Person> Query() { 
     return dataQuery.Query(new Person() { FIN = this.FIN, Name = this.Name }); 
    } 

} 

class LocationSearchEngine : SearchEngine<House> { 

    private DataQuery<House> dataQuery; 

    public LocationSearchEngine(DataQuery<House> dataQuery) { 
     this.dataQuery = dataQuery; 
    } 

    public string BlockNumber { set; get; } 
    public string StreetName { set; get; } 
    public string HouseNumber { set; get; } 
    public string PostalCode { set; get; } 

    public override IList<House> Query() { 
     return dataQuery.Query(new House() { BlockNumber = this.BlockNumber, StreetName = this.StreetName, HouseNumber = this.HouseNumber, PostalCode = this.PostalCode}); 
    } 
} 




abstract class DataQuery<T>{ 
    public abstract IList<T> Query(T arg) ; 
} 

class PersonDataQuery : DataQuery<Person> { 

    public override IList<Person> Query(Person arg) { 
     Console.WriteLine("Searching Person....."); 
     return null; 
    } 
} 

class LocationDataQuery : DataQuery<House> {   

    public override IList<House> Query(House arg) { 
     Console.WriteLine("Searching Location....."); 
     return null; 
    } 
} 

class Person { 
    public string FIN { get; set; } 
    public string Name { get; set; } 
} 

class House { 
    public string BlockNumber { set; get; } 
    public string StreetName { set; get; } 
    public string HouseNumber { set; get; } 
    public string PostalCode { set; get; } 
} 

使用法:

 SearchEngine<Person> searchEngine = new PersonSearchEngine(new PersonDataQuery());    
     searchEngine.Query(); 


     Console.ReadKey(); 

答えて

0

検索は常には、単一のサブシステムにをルーティングする場合。ルーティングパターンはどうですか?

検索結果がの場合、いくつかのサブシステムではとなります。アグリゲーターパターンはどうですか?

関連する問題