添加参数,还是创建新方法?

Goa*_*ine 5 c# oop design-patterns

假设我有一个长期建立的存储库,如下所示:

interface IDonutRepository
{
    public IEnumerable<Donut> GetDonuts();
}
Run Code Online (Sandbox Code Playgroud)

它已经存在了很长时间,并且该GetDonuts方法实现了它所说的.然后有一天我需要添加一个新的屏幕,显示数据库中的所有甜甜圈,结果证明该方法有一个隐藏的功能 - 它过滤掉所有的甜甜圈stale = true.但是在我的新屏幕上,我想展示所有这些,甚至是陈旧的!这里最好的方法是什么?

假设这个方法在所有地方使用,并且默认行为需要保持不变,最好是添加一个名为GetAllDonuts不进行过滤的新方法,还是应该只onlyFreshGetDonuts方法中添加一个参数?

我猜它只是判断力,但我想知道那里是否有更明智的答案?

Jus*_*ner 9

我会重载该方法创建一个新的重载,该重载接受showStale参数,然后修改旧方法以使用新的重载传递false参数值.

界面看起来像:

interface IDonutRepository
{
    public IEnumerable<Donut> GetDonuts();
    public IEnumerable<Donut> GetDonuts(bool showStale);
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您使用的是.NET 4.0,则可以使用可选参数:

interface IDonutRepository
{
    public IEnumerable<Donut> GetDonuts(bool showStale = false);
}
Run Code Online (Sandbox Code Playgroud)