我正在对提供数据的 API 进行更改。一些搜索需要有关作者的数据并获取IAuthor对象。API 有一个IAuthor接口和一个具体的实现类,IAuthor称为Author.
我需要添加一个布尔属性,IsNovelist这将改变一些但不是所有搜索的语义。
我听说过开放/封闭原则,似乎更改IAuthor和/或Author类会违反这一点。那么如何进行这个简单的改变呢?
更新:
也许我专注于错误的课程。我不想向类添加行为Author(这只是将参数传递给 API 的一种方式)。所以Decorated作者不需要布尔标志,因为它是isNovelist == true隐含的。
GetBooks给定一个被标记为小说家的作者,我需要更改该方法的行为。所以更像这样的东西,但我的想法可能很不稳定,因为现在我正在改变(而不是扩展)这个Books类:
//Before
class Books
{
public Books[] GetBooks(IAuthor author){
// Call data access GetBooks...
}
}
//After
class Books
{
public Books[] GetBooks(IAuthor author){
// To maintain pre-existing behaviour
// call data access GetBooks with SQL param @isNovelist = false...
// (or don't pass anything because the SQL param defaults to false)
}
public Books[] GetBooksForNovelist(IAuthor author){
// To get new behaviour
// call data access GetBooks with SQL param @isNovelist = true
}
}