【发布时间】:2011-03-23 17:44:54
【问题描述】:
假设我有一个像这样建立已久的存储库:
interface IDonutRepository
{
public IEnumerable<Donut> GetDonuts();
}
它已经存在很长时间了,GetDonuts 方法正如它所说的那样。然后有一天我需要添加一个新屏幕来显示数据库中的所有甜甜圈,结果发现该方法有一个隐藏的功能——它过滤掉了stale = true 的所有甜甜圈。但是在我的新屏幕上,我想展示所有这些,甚至是陈旧的!这里最好的方法是什么?
假设这个方法在所有地方都使用,并且默认行为需要保持不变,最好添加一个名为 GetAllDonuts 的新方法,它不进行过滤,还是我应该添加一个将onlyFresh 参数添加到GetDonuts 方法中?
我猜这只是判断,但我想知道那里是否有更明智的答案?
【问题讨论】:
-
如果您的界面被您无法控制且无法更改的代码使用,那么您不得更改界面。相反,添加一个实现第一个接口的新接口,新客户端应该使用新接口。
-
附注接口中的方法签名不能有访问修饰符。它们始终是公开的。
标签: c# oop design-patterns