Почему активный шаблон записи не работает с моделями с расширенным доменом? - PullRequest
11 голосов
/ 11 апреля 2011

Я читаю главу о архитектурных шаблонах в POEAA, и Фаулер говорит, что «поскольку логика предметной области усложняется, и вы начинаете двигаться к богатой доменной модели (116), начинается простой подход активной записи (160)сломать. Однозначное сопоставление классов домена с таблицами начинает терпеть неудачу, когда вы разбиваете логику домена на более мелкие классы. Реляционные базы данных не обрабатывают наследование, поэтому становится трудно использовать стратегии [Gang of Four] и другиеаккуратные OO-шаблоны. Поскольку логика домена становится неискренней, вы хотите иметь возможность протестировать ее без необходимости постоянно общаться с базой данных. "

Я действительно не понял этого.Под «однозначным соответствием классов доменов таблицам» он имеет в виду, что только для классов, в которых нет ассоциаций или иерархии наследования отдельных таблиц?

И почему факторизация логики домена в меньшие классы приводит к тому, что шаблонпотерпеть неудачу?

Ответы [ 2 ]

5 голосов
/ 12 апреля 2011

Он пытается сказать, что более сложные модели предметной области, как правило, представляют собой нечто большее, чем просто «данные из таблицы».Эти более сложные модели, о которых говорит Фаулер, - это модели, которые получают данные из разных таблиц, представлений или, возможно, даже из других источников.

Шаблон Active Record не очень подходит для этой цели, а шаблон DataMapper в сочетании с просто модельюклассы (содержащие только бизнес-логику и не взаимодействующие со слоем доступа к данным), вероятно, более подходят в подобных ситуациях.

В этом случае шаблон Active Record терпит неудачу, поскольку он более или менее отображается непосредственно в таблицу вбазу данных.

Я не знаю точного определения шаблона, поэтому, пожалуйста, исправьте меня, если я ошибаюсь.

2 голосов
/ 12 апреля 2011

Нет, я думаю, что он говорит о доменной логике. При активной записи объект несет как данные, так и поведение. Так что это матч один на один. Если вы начнете разделять данные / поведение, как в шаблоне Data Mapper, он становится один-ко-многим. У меня такое впечатление, что иногда вам действительно нужно читать эту книгу, как академическую чепуху, чтобы понять, что он имеет в виду. : -)

...