データを提供する API に変更を加えています (これは元の質問の更新です)。一部の検索では、作成者に関するデータが必要で、IAuthor
オブジェクトが取得されます。API には、インターフェースと、と呼ばれるIAuthor
を実装する単一の具象クラスがあります。IAuthor
Author
著者が小説家としてフラグ付けされている場合、メソッドの動作を変更Search.GetBooksByAuthor
して別のセマンティックを与える必要があります。オープン/クローズの原則について聞いたことがありますが、 IAuthor
and/or Author
and/orクラスを変更するとSearch
これに違反するようです (ただし、Book
クラスは間違いなく変更されていません)。では、この単純な変更を行うにはどうすればよいでしょうか。
たとえば、私はもともと次のようなことを考えていましたが、Search
クラスを変更する必要があるため、私の考えはおそらく不安定です。
//Before
class Search
{
public Books[] GetBooks(IAuthor author){
// Call data access GetBooks...
}
}
//After
class Search
{
public Books[] GetBooks(IAuthor author){
// To maintain pre-existing behaviour
// call data access GetBooks method with SQL param @AsNovelist = false...
// (or don't pass anything because the SQL param defaults to false)
}
public Books[] GetBooksAsNovelist(IAuthor author){
// To get new behaviour
// call data access GetBooks method with SQL param @AsNovelist = true
// so that their non-fiction books are omitted from results
}
}