我正在对提供数据的 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
}
}