CQS (Command Query Separation) — это принцип проектирования, предложенный Бертраном Мейером (автором языка Eiffel), согласно которому методы объекта должны быть либо командой, либо запросом, но не одновременно.
Каждый метод должен быть либо:
Командой — изменяет состояние объекта, но не возвращает значение.
Запросом — возвращает данные, но не изменяет состояние.
# Нарушает CQS:
def withdraw(amount):
balance -= amount
return balance # и меняет, и возвращает
# Соответствует CQS:
def withdraw(amount):
balance -= amount # команда
def get_balance():
return balance # запрос
Расшифровывается как Data Access Layer – уровень доступа к данным, так что более подробно читаем здесь Data Access Layer
Data Access Layer – уровень доступа к данным - предоставляет самые данные. За счёт отделения слоя данных его можно реализовать под различные базы данных и подменять по мере необходимости, можно абстрагироваться так, чтобы можно было тестировать другие слои отдельно от данных.
По мере роста приложения может потребоваться вносить изменения в данные с целью оптимизации, менять хранилище (например, поменять реляционную базу данных на документно-ориентированную).
Разделение на слои – является очень важным в разработке, чтобы проще было поддерживать код и расширять. На слое DAL не должно быть никакой логики, и он должен возвращать объекты, которые представляют данные, нужные для бизнес-логики.
Более подробно я подобные вещи показываю в своих примерах на практике. Можно много пытаться рассказать о том, как делить и что делить, но лучше увидеть слои на реальных примерах, что я показываю в своих практических примерах в разделе Roadmap.
Data Definition Language или язык определения данных или можно сокращённо DDL — это часть SQL, предназначенная для определения и управления структурой базы данных. С помощью DDL можно создавать, изменять и удалять объекты базы данных, такие как таблицы, представления, индексы и схемы.
Основные DDL команды:
- CREATE — создаёт новый объект базы данных.
- ALTER — изменяет существующий объект базы данных.
- DROP — удаляет объект из базы данных.
- TRUNCATE — удаляет все строки из таблицы, но сохраняет её структуру.
Команды DDL обычно автоматически фиксируются (autocommit) — изменения вступают в силу сразу и не могут быть отменены через ROLLBACK.
Data Manipulation Language или сокращённо DML — это подмножество SQL, предназначенное для работы с данными внутри таблиц. С помощью DML можно добавлять, изменять, удалять.Некоторые относят SELECT запросы к DML, хотя это всё же DQL.
Основные команды DML:
- INSERT — добавляет новые строки в таблицу.
- UPDATE — изменяет существующие данные.
- DELETE — удаляет строки из таблицы.
В отличие от DDL-команд, DML-команды не фиксируются автоматически — они требуют явного подтверждения через COMMIT. Изменения можно отменить с помощью ROLLBACK, если транзакция ещё не зафиксирована.
Data Query Language сокращённо DQL — это подмножество SQL, предназначенное для извлечения данных из базы данных. В отличие от DDL (структура) и DML (изменение данных), DQL фокусируется исключительно на запросах к данным.
Несмря на такое крутое название DQL, оно состоит только из одной команды SELECT, зато какой. SELECT команду относят и к DML, особенно есть есть ещё секция FROM и WHERE
DDL в ящыках запросов SQL это Data Definition Language или язык определения данных — это часть SQL, предназначенная для определения и управления структурой базы данных. С помощью DDL можно создавать, изменять и удалять объекты базы данных, такие как таблицы, представления, индексы и схемы.
Более подробно тут Data Definition Language
Deface тип хакерской атаки, при которой какая-то страница веб-сайта заменяется на другую — как правило, вызывающего вида (реклама, предупреждение, угроза и т.д.). Если дословно перевести deface на русский, то это будет изменение лица.
Более подробно Дефейс.
Dependency Inversion Principle (Принцип инверсии зависимостей) - принцип объектно-ориентированного программирования, суть которого состоит в том, что классы должны зависеть от абстракций, а не от конкретных деталей. Используется для минимизации зацепления в компьютерных программах. Может рассматриваться как уменьшение знаний о данных и поведении объекта (и зацепления с ним) до минимума, описанного интерфейсом.
Более подробно смотрите: Принцип инверсии зависимостей