Лучшие практики, та же функциональность от 1 метода, а также от 2 методов - PullRequest
2 голосов
/ 08 февраля 2012

У меня следующий сценарий. Некоторые люди используют подход 1, а некоторые используют подход 2. Оба подхода имеют одинаковую функциональную блокировку или разблокировку новостей с помощью идентификатора новостей в таблице новостей. что вы предлагаете, какой из них лучше и почему?

Примечание: я использую тип возврата void вместо bool для простоты, поэтому, пожалуйста, игнорируйте это

Подход 1:

public void LockNews(long newId)
{
 ......
}

public void UnlockNews(long newId)
{
 ...
}

Подход 2:

public void LockUnlockNews(long newId,bool Islock)
{
 ......
}

Ответы [ 4 ]

3 голосов
/ 08 февраля 2012

Подход 1, для меня, потому что ИМХО метод должен представлять одну операцию.В интересах написания тестируемого кода или любой формы автоматического тестирования, он будет поддерживать четкое разделение и будет иметь гораздо больше смысла.

Подход 2 ориентирован на операцию «все делает», которой ИМХО следует избегать.

1 голос
/ 08 февраля 2012

Первый подход.

Ваш метод - Команда и должен быть как можно более явным.Я бы даже спросил, почему кто-то, кроме самой News, знает, как заблокировать / разблокировать?Для меня новости должны отвечать за это:

var news = GetNewsSomehow(newsId);
news.Lock();
news.Unlock();

Имеет больше смысла, не так ли?:) Вы четко видите, какие у вас объекты и как они себя ведут.Это то, что называется инкапсуляция в ООП.

1 голос
/ 08 февраля 2012

Я предпочитаю Подход 1. Он проясняет, что происходит. Если вы используете подход 2 и звоните

LockUnlockNews(42, true);

Не сразу понятно, является ли это блокировкой или разблокировкой. Просто подливать масла в огонь: если вы изменили bool на enum или const, то мой аргумент недействителен.

LockUnlockNews(42, LOCK);

так же ясно, как и

LockNews(42);
0 голосов
/ 08 февраля 2012

Я комбинирую оба подхода, как показано ниже:

Публичные методы обеспечивают понятный интерфейс и более тестируемы :

public void LockNews(long newId)
{
    LockUnlockNews(newId, true);
}

public void UnlockNews(long newId)
{
    LockUnlockNews(newId, false);
}

Частный метод ведет реальный бизнес и увеличивает модульность управление вещами из одного места:

private void LockUnlockNews(long newId,bool Islock)
{
    ......
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...