Alle Originalinhalte werden auf Ukrainisch erstellt. Noch nicht alle Inhalte wurden übersetzt. Einige Beiträge sind möglicherweise nur auf Ukrainisch verfügbar.Mehr erfahren

Was ist PORO in Ruby?

Beitrags-Cover: Was ist PORO in Ruby?
InhaltsverzeichnisKlicke auf den Link, um zur gewünschten Stelle zu navigieren
Dieser Inhalt wurde automatisch aus dem Ukrainischen übersetzt.
In Ruby wird oft der Begriff PORO (Plain Old Ruby Object) erwähnt, aber was ist das und warum ist es wichtig?

PORO: einfach erklärt

PORO ist einfach ein gewöhnliches Ruby-Objekt. Es erbt nicht von spezifischen Bibliotheken oder Klassen von Frameworks wie ActiveRecord, ActionController oder anderen. PORO ist ein Objekt, das:
  1. Leicht und minimalistisch ist.
  2. Nur die Methoden hat, die zur Lösung einer spezifischen Aufgabe benötigt werden.
  3. Von externen Frameworks oder Bibliotheken unabhängig ist.

Vorteile von PORO

  • Einfachheit: PORO ermöglicht es, den Code sauber und verständlich zu halten.
  • Flexibilität: Sie können PORO in jedem Ruby-Projekt ohne Bindung an Frameworks verwenden.
  • Testabdeckung: PORO ist leicht zu testen, da sie keine Abhängigkeiten von komplexen Framework-Ökosystemen haben.

Wann sollte man PORO verwenden?

  1. Wenn Sie spezifische Geschäftslogik implementieren müssen, die nicht zu Modellen, Controllern oder Helfern passt.
  2. Wenn Sie kleine, eigenständige Klassen erstellen möchten.
  3. Wenn Sie die Abhängigkeit von Frameworks verringern und den Code modularer gestalten möchten.
PORO ist wichtig für flexibles Design, da es ermöglicht, unabhängige Komponenten zu erstellen, die nicht von Frameworks wie Rails abhängen. Stellen Sie sich zum Beispiel die Geschäftslogik zur Berechnung von Gehältern vor. Wenn sie an ActiveRecord gebunden ist, hängt ihre Verwendung vom Zugriff auf die Datenbank ab. Dies erschwert das Testen und schränkt die Wiederverwendbarkeit in anderen Kontexten wie APIs oder Mikrodiensten ein.
Dank PORO können Sie die Logik in ein separates Objekt auslagern, das nur mit Eingabedaten arbeitet und keine Bindungen an externe Abhängigkeiten hat. Dieser Ansatz vereinfacht das Testen, erhöht die Modularität des Codes und ermöglicht es, ihn leicht an neue Anforderungen anzupassen. Das macht PORO zu einem effektiven Werkzeug für die Erstellung einer sauberen Anwendungsarchitektur.

Verwendung von PORO in Rails

Stellen wir uns vor, dass in Ihrem Rails-Projekt die Notwendigkeit besteht, die Gesamtkosten einer Bestellung zu berechnen:
class OrderTotalCalculator
  def initialize(order)
    @order = order
  end

  def total
    @order.items.sum { |item| item.price * item.quantity }
  end
end

# Verwendung:
order = Order.find(1) # Beispiel für ein ActiveRecord-Modell
calculator = OrderTotalCalculator.new(order)
puts calculator.total
In diesem Beispiel ist OrderTotalCalculator ein PORO. Es ist von Rails-Modellen und -Controllern getrennt, was es unabhängig und leicht testbar macht.

Wie testet man PORO?

Dank seiner Einfachheit ist PORO leicht mit RSpec oder MiniTest zu testen:
RSpec.describe DiscountCalculator do
  it 'berechnet den richtigen Preis mit Rabatt' do
    calculator = DiscountCalculator.new(100, 10)
    expect(calculator.final_price).to eq(90.0)
  end
end
PORO ist die Grundlage für ein sauberes und einfaches Design in Ruby. Sie (einfache Objekte ohne Abhängigkeiten) helfen dabei, flexible, unabhängige Komponenten zu erstellen, die leicht erweiterbar, wartbar und testbar sind.

Dieser Beitrag hat noch keine Ergänzungen vom Autor.

Was bedeutet relational (im Kontext von relationalen Datenbanken)?
21. Sep, 08:27 Uhr

Was bedeutet relational (im Kontext von relationalen Datenbanken)?

meme code
meme code@memecode
Was ist ein RDBMS (relationales Datenbankmanagementsystem)?
21. Sep, 08:56 Uhr

Was ist ein RDBMS (relationales Datenbankmanagementsystem)?

meme code
meme code@memecode
Was bedeutet das ACID-Prinzip in der Programmierung?
24. Sep, 20:31 Uhr

Was bedeutet das ACID-Prinzip in der Programmierung?

meme code
meme code@memecode
Was ist Convention over Configuration (im Kontext von RoR und nicht nur)?
26. Sep, 07:47 Uhr

Was ist Convention over Configuration (im Kontext von RoR und nicht nur)?

meme code
meme code@memecode
Rundung von Dezimalzahlen: mathematische Regeln, JavaScript und Ruby
18. Okt, 12:59 Uhr

Rundung von Dezimalzahlen: mathematische Regeln, JavaScript und Ruby

meme code
meme code@memecode
[Fix] Fabrik nicht registriert: "user" (KeyError) (FactoryBot / Rails 7)
07. Dez, 10:46 Uhr

[Fix] Fabrik nicht registriert: "user" (KeyError) (FactoryBot / Rails 7)

meme code
meme code@memecode
Was ist der Unterschied zwischen spec_helper.rb und rails_helper.rb in RSpec?
08. Dez, 13:53 Uhr

Was ist der Unterschied zwischen spec_helper.rb und rails_helper.rb in RSpec?

meme code
meme code@memecode
09. Dez, 14:50 Uhr

[Fix] Keine solche Datei oder Verzeichnis @ rb_sysopen - tmp/pids/server.pid

meme code
meme code@memecode
Was man wissen muss, um eine erfolgreiche Karriere als Freelancer im IT-Bereich aufzubauen
23. Dez, 16:03 Uhr

Was man wissen muss, um eine erfolgreiche Karriere als Freelancer im IT-Bereich aufzubauen

meme code
meme code@memecode
Virtueller Cloud-Server: Was ist das und was sind seine Besonderheiten
03. Jan, 10:58 Uhr

Virtueller Cloud-Server: Was ist das und was sind seine Besonderheiten

meme code
meme code@memecode
[Fix] Heroku / SearchBox-Addon - Indexierungsfehler "Der Client kann den Server nicht als Elasticsearch verifizieren"
31. Jan, 13:09 Uhr

[Fix] Heroku / SearchBox-Addon - Indexierungsfehler "Der Client kann den Server nicht als Elasticsearch verifizieren"

meme code
meme code@memecode
06. Feb, 15:31 Uhr

Fehlerbehebung [DEPRECATION] #adapters ist veraltet. Verwenden Sie stattdessen #profiles. (Codecov / docile)

meme code
meme code@memecode