gpt4 book ai didi

c# - 强制客户端在调用同一个类的第二个方法之前调用一个方法是一种不好的做法吗?

转载 作者:行者123 更新时间:2023-11-30 19:24:25 25 4
gpt4 key购买 nike

这是一个关于设计/最佳实践的问题。

我有以下类(class):

class MyClass 
{
public bool IsNextAvailablle()
{
// implementation
}

public SomeObject GetNext()
{
return nextObject;
}
}

我认为这是一个糟糕的设计,因为此类的用户需要知道他们需要在调用 GetNext() 之前调用 IsNextAvailable()

然而,这个“隐藏的契约(Contract)”是我唯一能看出来的错误,用户可以在没有可用的情况下调用 GetNext()。 (如果有人能指出这个实现不好的其他场景,我会很高兴)

我想到的第二个实现是,如果 nextObject 不可用,GetNext() 会抛出异常。客户端将不得不处理异常,而且由于 .net 中的异常处理机制,它会对性能和 cpu 使用率产生很小的影响(我预计这个异常会经常抛出)。异常驱动方式是否比前一种方式更好?哪种方法最好?

最佳答案

这样就好了。事实上,这个两步过程是一堆 .NET BCL 类的常用习惯用法。参见,例如 IEnumerable :

using(var enumerator = enumerable.Enumerator())
{
while(enumerator.MoveNext())
{
// Do stuff with enumerator.Current
}
}

DbDataReader :

using(var dbDataReader = dbCommand.ExecuteReader())
{
while(dbDataReader.Read())
{
// Do stuff with dbDataReader
}
}

Stream ,就此而言:

var buffer = new byte[1024];

using(var stream = GetStream())
{
var read = 0;
while((read = stream.Read(buffer, 0, buffer.Length)))
{
// Do stuff with buffer
}
}

现在,您的整个 IsNextAvailable()/GetNext()很可能被实现 IEnumerable<SomeObject> 取代因此,任何 .NET 开发人员都会立即熟悉您的 API。

关于c# - 强制客户端在调用同一个类的第二个方法之前调用一个方法是一种不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37345949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com