Single Responsibility Principle(SRP)
Этот принцип гласит, что каждый класс должен нести единственную ответственность. В нем подчеркивается, что класс должен выполнять одну конкретную функцию и не иметь слишком много причин для изменения.
Пример: управление информацией о пользователях и отправка уведомлений по электронной почте.
class UserManager
def create_user(user_data)
# Logic for creating a user
end
end
class EmailService
def send_email(email_data)
# Logic for sending an email
end
end
Open/Closed Principle(OCP)
Этот принцип поощряет расширение функциональности за счет добавления нового кода, а не изменения существующего кода.
Пример: обработка различных способов оплаты в приложении электронной коммерции.
class PaymentProcessor
def process_payment
# Common logic for payment processing
end
end
class CreditCardPaymentProcessor < PaymentProcessor
def process_payment
# Logic for processing credit card payment
end
end
class PayPalPaymentProcessor < PaymentProcessor
def process_payment
# Logic for processing PayPal payment
end
end
Liskov Substitution Principle(LSP)
Этот принцип утверждает, что объекты производного класса должны заменяться объектами базового класса без ущерба для корректности программы.
Пример: Управление геометрическими фигурами.
class Shape
def area
# Common logic for calculating area
end
end
class Rectangle < Shape
def area
# Logic for calculating area of rectangle
end
end
class Square < Shape
def area
# Logic for calculating area of square
end
end
Interface Segregation Principle(ISP)
Этот принцип рекомендует разбивать интерфейсы на более мелкие, чтобы не заставлять классы реализовывать методы, которые им не нужны.
Пример: интерфейсы для обновления и отображения данных.
module UpdateableFeature
def update_feature
# Logic for updating feature
end
end
module DisplayableFeature
def display_feature
# Logic for displaying feature
end
end
Dependency Inversion Principle(DIP)
Этот принцип предлагает использовать внедрение зависимостей для управления зависимостями.
Пример: использование внедрения зависимостей для управления зависимостями.
class OrderProcessor
def initialize(db_connection, email_service)
@db_connection = db_connection
@email_service = email_service
end
end
Помните, что применение SOLID принципов Ruby должно осуществляться гибко, исходя из конкретной цели вашего проекта и вашего понимания SOLID и Ruby.