Интересно.
Вам также может быть интересно посмотреть на Закон Деметры .
Другая вещь, которая может вас заинтересовать - это c2's FearOfAddingClasses , поскольку, возможно, те же рассуждения, которые приводят программистов к денормализации баз данных, также приводят к божественным классам и другим запахам кода. И для нормализации OO, и для DB мы хотим разложить все. Для баз данных это означает больше таблиц, для ОО - больше классов.
Теперь стоит иметь в виду несоответствие реляционного импеданса объекта , то есть, вероятно, не все будет переведено чисто.
Объектно-реляционные модели или «персистентные слои», как правило, имеют соотношения 1: 1 между атрибутами объекта и полями базы данных. Итак, мы можем нормализовать? Скажем, у нас есть объект отдела с атрибутами employee1, employee2 ... и т. Д. Очевидно, что это должно быть заменено списком сотрудников. Таким образом, мы можем сказать, что 1NF работает.
Имея это в виду, давайте перейдем прямо к уничтожению и рассмотрим проект базы данных 6NF, хороший пример - Anchor Modeling, (игнорируем соглашение об именах) . Anchor Modeling / 6NF предоставляет сильно разложенные и гибкие схемы базы данных ; как это переводится в ОО «нормализация»?
Якорное моделирование имеет следующие виды отношений:
- Anchors - уникальные идентификаторы объектов.
- Атрибуты, которые переводятся в атрибуты объекта: (Якорь, значение, метаданные).
- Связи - отношения между двумя или более объектами (самими якорями): (Якорь, Якорь ..., метаданные)
- Узлы, приписанные галстукам.
Метаданные атрибута могут быть любыми: кто изменил атрибут, когда, почему и т. Д.
OO перевод выглядит очень гибко:
- Якоря предлагают заполнители без атрибутов, например, прокси, который знает, как работать с композицией атрибутов.
- Атрибуты предлагают классы, представляющие атрибуты и то, к чему они принадлежат. Это предлагает применить повторное использование к тому, как атрибуты ищутся и обрабатываются, например, автоматическая проверка ограничений и т. Д. Из этого у нас есть основа для общей реализации структурных шаблонов в стиле GOF.
- Связи и узлы предлагают классы, представляющие отношения между объектами. Основа для общей реализации шаблонов поведенческого дизайна?
Интересные и желательные свойства Anchor Modeling, которые также пересекаются:
- Все это требует замены наследования композицией (хорошо) в выставленных объектах.
- Атрибуты имеют владельцев, а не владельцев, имеющих атрибуты. Несмотря на то, что это делает поиск атрибутов более сложным, он аккуратно решает некоторые проблемы с наложением имен, так как может быть только один владелец.
- Нет необходимости в NULL. Это приводит к более ясной обработке NULL. Классы атрибутов с пустым регистром могут предоставлять методы для обработки отсутствия определенного атрибута вместо выполнения NULL-проверки везде.
- Метаданные атрибута. Полная историзация и обвинения на уровне атрибутов: «воспроизвести» объекты во времени, посмотреть, что изменилось, когда и почему и т. Д. (При необходимости - метаданные совершенно необязательны)
Вероятно, будет много очень простых классов (что хорошо) и очень декларативный стиль программирования (также хорошо).
Спасибо за такой вопрос, заставляющий задуматься, я надеюсь, что это полезно для вас.