Witam, która z poniższych wersji kodu będzie Twoim zdaniem lepsza i dlaczego?
Wersja 1:
MessageSender.h
#pragma once
#include <string>
class MessageSender {
public:
bool send(const std::string& message);
private:
bool isAllowed(const std::string& message) const;
};
MessageSender.cpp
#include "MessageSender.h"
bool MessageSender::send(const std::string& message)
{
if (isAllowed(message)) {
//kod wysylania wiadomosci
return true;
}
return false;
}
bool MessageSender::isAllowed(const std::string& message) const
{
//kod sprawdzajacy, czy wiadomosc jest dozwolona
//na przyklad czy nie jest pusta i czy nie jest wulgarna
}
Wersja 2:
MessageSender.h
#pragma once
#include <string>
class MessageSender {
public:
bool isAllowed(const std::string& message) const;
void send(const std::string& message);
};
MessageSender.cpp
#include "MessageSender.h"
bool MessageSender::isAllowed(const std::string& message) const
{
//kod sprawdzajacy, czy wiadomosc jest dozwolona
//na przyklad czy nie jest pusta i czy nie jest wulgarna
}
void MessageSender::send(const std::string& message)
{
//kod wysylania wiadomosci
}
Podsumowywując, w wersji pierwszej użytkownik jest zabezpieczony przed popełnieniem błędu związenego z nie wywołaniem metody isAllowed. Jednak z drugiej strony może to być mylące, jeżeli użytkownik nie spojrzy na typ wartości zwracanej, to może się okazać, że uzna on wiadomość za wysłaną, kiedy wcale taką nie jest. W wersji drugiej to użytkownik jest zobowiązany do wywołania metody isAllowed przed wywołaniem metody send. Takie rozdzielenie umożliwia użytkownikowi zdecydowanie, czy chce on wysyłać również wiadomości niedozwolone.