シナリオでブリッジパターンを使用するのが良いかどうか、ご意見をお聞きしたいと思います。このシナリオでは、さまざまな検索パラメータを受け入れることができる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();