refactor: clean up comments in student list classes for clarity and consistency

lab4
Artem-Darius Weber 2 months ago
parent da53a9c4ae
commit 82a2b663a8

@ -149,6 +149,7 @@ classDiagram
BinarySearchTree o-- Node BinarySearchTree o-- Node
Node o-- Student Node o-- Student
StudentsList o-- Student
StudentsListBase o-- Student StudentsListBase o-- Student
StudentsListDB o-- DatabaseConnection StudentsListDB o-- DatabaseConnection
DatabaseConnection <.. Singleton DatabaseConnection <.. Singleton

@ -12,24 +12,23 @@ class StudentsList
@students = [] @students = []
end end
# Загрузка студентов через выбранную стратегию. # Загрузка студентов через выбранную стратегию
def load def load
@students = @persistence_strategy.load(@filename) @students = @persistence_strategy.load(@filename)
self self
end end
# Сохранение студентов через выбранную стратегию. # Сохранение студентов через выбранную стратегию
def save def save
@persistence_strategy.save(@filename, @students) @persistence_strategy.save(@filename, @students)
self self
end end
# Получить объект Student по ID.
def get_student_by_id(id) def get_student_by_id(id)
@students.find { |s| s.id.to_s == id.to_s } @students.find { |s| s.id.to_s == id.to_s }
end end
# Получить список из k студентов (страница n) в виде объекта DataList. # Получить список из k студентов (страница n) в виде объекта DataList
def get_k_n_student_short_list(k, n, data_list = nil) def get_k_n_student_short_list(k, n, data_list = nil)
start_index = (n - 1) * k start_index = (n - 1) * k
sorted_students = @students.sort_by { |s| s.surname_initials } sorted_students = @students.sort_by { |s| s.surname_initials }
@ -48,12 +47,11 @@ class StudentsList
end end
end end
# Сортировка студентов по фамилии и инициалам. # Сортировка студентов по фамилии и инициалам
def sort_students! def sort_students!
@students.sort_by! { |s| s.surname_initials } @students.sort_by! { |s| s.surname_initials }
end end
# Добавление студента с автоматическим присвоением нового ID.
def add_student(student) def add_student(student)
new_id = if @students.empty? new_id = if @students.empty?
1 1
@ -66,7 +64,6 @@ class StudentsList
student student
end end
# Обновление студента по ID.
def update_student_by_id(id, new_student) def update_student_by_id(id, new_student)
index = @students.find_index { |s| s.id.to_s == id.to_s } index = @students.find_index { |s| s.id.to_s == id.to_s }
if index if index
@ -78,14 +75,12 @@ class StudentsList
end end
end end
# Удаление студента по ID.
def delete_student_by_id(id) def delete_student_by_id(id)
initial_count = @students.size initial_count = @students.size
@students.reject! { |s| s.id.to_s == id.to_s } @students.reject! { |s| s.id.to_s == id.to_s }
initial_count != @students.size initial_count != @students.size
end end
# Получить количество студентов.
def get_student_short_count def get_student_short_count
@students.size @students.size
end end

@ -11,22 +11,21 @@ class StudentsListBase
@students = [] @students = []
end end
# Абстрактный метод для загрузки данных. # Абстрактный метод
def load_from_file def load_from_file
raise NotImplementedError, "Метод load_from_file должен быть реализован в подклассе" raise NotImplementedError, "Метод load_from_file должен быть реализован в подклассе"
end end
# Абстрактный метод для сохранения данных. # Абстрактный метод
def save_to_file def save_to_file
raise NotImplementedError, "Метод save_to_file должен быть реализован в подклассе" raise NotImplementedError, "Метод save_to_file должен быть реализован в подклассе"
end end
# Получить объект Student по ID.
def get_student_by_id(id) def get_student_by_id(id)
@students.find { |s| s.id.to_s == id.to_s } @students.find { |s| s.id.to_s == id.to_s }
end end
# Получить список из k студентов (страница n) в виде объекта DataList. # Получить список из k студентов (страница n) в виде объекта DataList
def get_k_n_student_short_list(k, n, data_list = nil) def get_k_n_student_short_list(k, n, data_list = nil)
start_index = (n - 1) * k start_index = (n - 1) * k
sorted_students = @students.sort_by { |s| s.surname_initials } sorted_students = @students.sort_by { |s| s.surname_initials }
@ -45,12 +44,11 @@ class StudentsListBase
end end
end end
# Сортировать список студентов по ФамилияИнициалы. # Сортировать список студентов по ФамилияИнициалы
def sort_students! def sort_students!
@students.sort_by! { |s| s.surname_initials } @students.sort_by! { |s| s.surname_initials }
end end
# Добавить объект Student в список (формирование нового ID).
def add_student(student) def add_student(student)
new_id = if @students.empty? new_id = if @students.empty?
1 1
@ -63,7 +61,6 @@ class StudentsListBase
student student
end end
# Обновить студента по ID.
def update_student_by_id(id, new_student) def update_student_by_id(id, new_student)
index = @students.find_index { |s| s.id.to_s == id.to_s } index = @students.find_index { |s| s.id.to_s == id.to_s }
if index if index
@ -75,14 +72,12 @@ class StudentsListBase
end end
end end
# Удалить студента по ID.
def delete_student_by_id(id) def delete_student_by_id(id)
initial_count = @students.size initial_count = @students.size
@students.reject! { |s| s.id.to_s == id.to_s } @students.reject! { |s| s.id.to_s == id.to_s }
initial_count != @students.size initial_count != @students.size
end end
# Получить количество студентов.
def get_student_short_count def get_student_short_count
@students.size @students.size
end end

@ -9,14 +9,12 @@ class StudentsListDB
@db = DatabaseConnection.instance @db = DatabaseConnection.instance
end end
# Получить объект Student по ID.
def get_student_by_id(id) def get_student_by_id(id)
result = @db.query("SELECT * FROM student WHERE id = #{id} LIMIT 1") result = @db.query("SELECT * FROM student WHERE id = #{id} LIMIT 1")
row = result.first row = result.first
row ? row_to_student(row) : nil row ? row_to_student(row) : nil
end end
# Получить список из k студентов (страница n) в виде объекта DataList.
def get_k_n_student_short_list(k, n) def get_k_n_student_short_list(k, n)
offset = (n - 1) * k offset = (n - 1) * k
results = @db.query("SELECT * FROM student ORDER BY surname, name, patronymic LIMIT #{k} OFFSET #{offset}") results = @db.query("SELECT * FROM student ORDER BY surname, name, patronymic LIMIT #{k} OFFSET #{offset}")
@ -24,7 +22,6 @@ class StudentsListDB
DataListStudentShort.new(student_shorts) DataListStudentShort.new(student_shorts)
end end
# Добавить объект Student в БД (ID формируется автоматически).
def add_student(student) def add_student(student)
sql = <<~SQL sql = <<~SQL
INSERT INTO student (git, surname, name, patronymic, birth_date, phone, telegram, email) INSERT INTO student (git, surname, name, patronymic, birth_date, phone, telegram, email)
@ -46,7 +43,6 @@ class StudentsListDB
student student
end end
# Обновить студента по ID.
def update_student_by_id(id, new_student) def update_student_by_id(id, new_student)
sql = <<~SQL sql = <<~SQL
UPDATE student SET UPDATE student SET
@ -65,13 +61,11 @@ class StudentsListDB
@db.client.affected_rows > 0 @db.client.affected_rows > 0
end end
# Удалить студента по ID.
def delete_student_by_id(id) def delete_student_by_id(id)
@db.query("DELETE FROM student WHERE id = #{id}") @db.query("DELETE FROM student WHERE id = #{id}")
@db.client.affected_rows > 0 @db.client.affected_rows > 0
end end
# Получить количество студентов.
def get_student_short_count def get_student_short_count
result = @db.query("SELECT COUNT(*) as count FROM student") result = @db.query("SELECT COUNT(*) as count FROM student")
result.first['count'] result.first['count']
@ -79,7 +73,8 @@ class StudentsListDB
private private
# Преобразование строки результата в объект Student. # Преобразование строки результата в объект Student
def row_to_student(row) def row_to_student(row)
Student.new( Student.new(
id: row['id'].to_s, id: row['id'].to_s,
@ -94,7 +89,7 @@ class StudentsListDB
) )
end end
# Простой метод для экранирования строк (на практике лучше использовать подготовленные выражения). # Метод для экранирования строк
def escape(value) def escape(value)
@db.client.escape(value.to_s) @db.client.escape(value.to_s)
end end

@ -3,11 +3,11 @@ require_relative '../providers/students_list_db'
students_db = StudentsListDB.new students_db = StudentsListDB.new
# Пример: получение студента с ID = 1 # получение студента с ID = 1
student = students_db.get_student_by_id(1) student = students_db.get_student_by_id(1)
puts student ? student.get_info : "Студент не найден" puts student ? student.get_info : "Студент не найден"
# Пример: получение второй страницы по 2 записи (если записей достаточно) # получение второй страницы по 2 записи (если записей достаточно)
data_list = students_db.get_k_n_student_short_list(2, 2) data_list = students_db.get_k_n_student_short_list(2, 2)
puts "Количество студентов: #{students_db.get_student_short_count}" puts "Количество студентов: #{students_db.get_student_short_count}"
data_table = data_list.get_data data_table = data_list.get_data

Loading…
Cancel
Save