最佳实践,1种方法和2种方法的功能相同
本文关键字:方法 功能 2种 1种 最佳 | 更新日期: 2023-09-27 18:23:56
我有以下场景。有些人使用方法1,有些人则使用方法2。这两种方法都有相同的功能,根据新闻表中的新闻id锁定或解锁新闻。你的建议是什么,哪一个更好,为什么?
注意:为了简单起见,我使用void返回类型而不是bool,因此请忽略此
方法1:
public void LockNews(long newId)
{
......
}
public void UnlockNews(long newId)
{
...
}
方法2:
public void LockUnlockNews(long newId,bool Islock)
{
......
}
方法1,对我来说,因为IMHO方法应该表示单个操作。为了编写可测试代码或任何形式的自动化测试,它将保持清晰的分离,并更有意义。
方法2倾向于"无所不能"的操作,IMHO应避免这种操作。
我更喜欢方法1。它清楚地表明了发生了什么。如果你使用方法2并调用
LockUnlockNews(42, true);
目前尚不清楚这是锁定还是解锁。只是火上浇油:如果你把bool改为enum或const,那么我的论点就是无效的。
LockUnlockNews(42, LOCK);
和一样清晰
LockNews(42);
第一种方法。
您的方法是命令,应该尽可能显式。我甚至会问你,除了新闻本身,为什么有人知道如何锁定/解锁?对我来说,新闻应该对此负责:
var news = GetNewsSomehow(newsId);
news.Lock();
news.Unlock();
更有意义,不是吗?:)你可以清楚地看到你的物体是什么,它们有什么行为。这就是OOP中所谓的封装。
我将这两种方法结合起来,通常如下所示:
公共方法提供清晰的接口并且更易于测试:
public void LockNews(long newId)
{
LockUnlockNews(newId, true);
}
public void UnlockNews(long newId)
{
LockUnlockNews(newId, false);
}
私有方法执行实际业务,增加模块性从一个位置管理事物:
private void LockUnlockNews(long newId,bool Islock)
{
......
}