最佳实践,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种方法和2种方法的功能相同

方法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)
{
    ......
}