好的,我会尽可能地解释这个。 我有一个类,比如MyLib,其方法将由另一个类使用,比如Consumer类。 在MyLib中有一个名为Navigate()的公共方法,将由Consumer使用。这种方法为Consumer提供了一个抽象级别,因为它可以使用这种方法提供不同类型的导航。以下代码段提供了所需的代码映射。
// this method will be exposed to the consumer class.
public bool Navigate (NavigationType type)
{
// this method will decide which private _navigateToXyz() method will be called.
switch (type)
{
case x: return _navigateToX();
case y: return _navigateToY();
case z: return _navigateToZ(arg1, arg2);
case a: return _navigateToA(arg3);
}
}
private bool _navigateToX() { }
private bool _navigateToY() { }
// two or three additional _navigateTo_() without any parameters
private bool _navigateToZ (arg1, arg2) { }
private bool _navigateToA (arg3) { }
如上所示,除了两个私有方法之外的所有方法都需要传递一些参数。因此,如果我遵循这种方法,那么我基本上也必须在Navigate()中传递这些参数 - 那些其他方法都不能做任何事情的参数。
我现在正在这样做。但我想知道在这种情况下是否有更好的方法?
更新:经过一些头脑风暴之后,我认为Navigate()方法不是必需的,因为它几乎只是根据传递的navigationType调用一个合适的方法。现在,navigator()的调用者知道了navigationType,如果这些方法公开为public,他可以自己调用所需的方法。我希望我很清楚。那么可选参数现在一直很重要吗?方法重载更有意义吗?
答案 0 :(得分:1)
拥有该方法的多个公共版本。对于通过智能感知来看待这一点的消费者来说,这将更有意义。
答案 1 :(得分:0)
使用.NET 4.0中引入的可选参数
答案 2 :(得分:0)
您可以提供重载或更多重载,但请注意,重载会降低API的可解除性。每次API的消费者需要“导航”时,它首先要决定调用哪个重载。如果重载很有意义,并且消费者已经熟悉API,那么这可能没问题。
另一种方法是使用类传递参数。在您的情况下,NavigationType可以是一个封装所有可能参数组合的类。这个类也可以有一些常量,因此它几乎可以用作枚举。此类也可能有过载的使用者或流畅的构建器界面,以方便使用。如果合适,该类还可以包含一些导航逻辑或导航选择逻辑。