【发布时间】:2018-07-10 20:29:50
【问题描述】:
假设我有一个从数据库中获取歌曲的基本方法 GetSong(),以及两个调用它的方法 - GetRockSong() 和 GetPopSong()。
这两种方法都接受歌曲名称的字符串输入,然后将该输入与流派一起传递给GetSong() 方法。
基础方法是否应该负责验证字符串输入?
我认为前两种方法应该,但这会导致重复完全相同的代码(即检查字符串是否为空)。
显然我使用了一个非常简单的插图,但问题几乎相同。
示例代码:
public Song GetRockSong(string title)
{
// could null check title here before calling the method?
return GetSong(title, "Rock");
}
public Song GetPopSong(string title)
{
// could null check title here before calling the method?
return GetSong(title, "Pop");
}
public Song GetSong(string title, string genre)
{
// example validation, if null checking title above
// then could just check genre here
if (!string.IsNullOrEmpty(title) && !string.IsNullOrEmpty(genre))
{
// fetch song logic here
}
// etc
}
【问题讨论】:
-
如果与任何一种特定方法相关的标题没有任何独特之处(即只有流行歌曲可以有数字,而摇滚歌曲不能(我知道不好的例子))然后我不明白为什么不能只在共享方法中进行验证。
-
我想说签入
GetSong()是要走的路。不仅因为您减少了检查次数,而且还避免了依赖其他两种方法来为您提供正确的输入。 -
@BenKrueger 是的,两种方法的验证完全相同
-
视情况而定。如果您不需要在这两种方法中处理其验证形式的输入,您可以简单地将这个任务委托给公共方法。如果需要,可以编写一个验证方法,从两者中调用。 DRY-不要重复自己。另一方面,简单的检查,如 NullOrWhitespace 可能值得在更复杂的场景中重复。
-
@ZorgoZ 在我正在处理的项目中,有一种验证方法基本上可以检查所提供的值。此方法用于验证所有字符串和其他类型的输入。我想我只是不认为我应该在两个单独的方法中多次使用这个 ValidateInput(x) 方法,因为我可以将它们合并到共享中
标签: c# .net validation