SOLID

Dana jest prosta klasa:

struct Example
{
    int execute(int a)
    {
        const int result = a * a;
        std::cout << "result is:" << result;
        return result;
    }
};

Czy ten kawałek kodu jest zgodny z regułami SOLID? Jeśli nie, to w jaki sposób je narusza i jak należałoby poprawić kod?

SOLID - 1

Day jest kod:

class DocumentWriter
{
public:
  virtual void write(const Document& doc) = 0;
};
class DocumentFileWriter : public DocumentWriter
{
public:
  void write(const Document& doc) override
  {
    out << doc.header() << "\n" << doc.data() << "\n.\n";
    out.flush();
  }

  // ... szczegóły implementacji są nieistotne
};

class DocumentDatabaseWriter : public DocumentWriter
{
public:
  void write(const Document& doc) override
  {
    db.insertRow(doc.header(), doc.data());
  }

  void commit()
  {
     db.commit();
  }

  // ... szczegóły implementacji są nieistotne
};

void userCode()
{
  Document doc;
  // ...
  DocumentWriter* writer = factory.createWriter();
  writer->write(doc);
}
Czy ten kawałek kodu jest zgodny z regułami SOLID? Jeśli nie, to w jaki sposób je narusza i jak należałoby poprawić kod?


SOLID - 2

Dany jest kod:

class Document
{
public:
  void save(std::string_view fileName)
  {
    std::ofstream out(fileName);
    out << title();
    out << "\n";
    out << data(); // typ Data poprawnie zachowa swoje dane w tej operacji
    out << "\n.\n";
  }

  std::string title() const;
  Data data() const; // typ Data nieistotny dla reszty problemu
  void combine(const Data& other)
  {
    // szczegóły implementacji nie mają znaczenia
}
};

Czy ten kawałek kodu jest zgodny z regułami SOLID? Jeśli nie, to w jaki sposób je narusza (może naruszać więcej niż jedną regułę) i jak należałoby poprawić kod?



SOLID - 3

Day jest kod:

class Document
{
public:
  void print()
  {
    ColorPrinter p;
    //  szczegóły implementacji nie mają znaczenia
    p.print();
  }

  std::string title() const;
  Data data() const; // typ Data umie się zapisywać

  void combine(const Data& other)
  {
    // szczegóły implementacji nie mają znaczenia
  }
};


Czy ten kawałek kodu jest zgodny z regułami SOLID? Jeśli nie, to w jaki sposób je narusza (może naruszać więcej niż jedną regułę) i jak należałoby poprawić kod?