Объединение определенных пользователем агрегатов (например, количества SQL) с «чистыми» объектами модели? - PullRequest
1 голос
/ 06 марта 2009

Какова лучшая практика введения пользовательских (обычно изменчивых) данных в классы модели сущностей? Сначала это может звучать как плохая практика, но, похоже, это довольно распространенный сценарий. В нашем недавнем веб-приложении мы разработали правильную модель, и в большинстве случаев мы справляемся с загрузкой сущностей модели. Но есть случаи, когда мы не можем позволить себе загрузить целую иерархию объектов; нам нужно загрузить, скажем, результаты пары SQL COUNT или, возможно, некоторую дополнительную информацию вместе (или встроенную внутри) с объектами модели. Таким образом, в основном, требования и условия:

  1. Это веб-приложение, в котором 99,99999999999% всех операций являются операциями чтения.

  2. Им не нужно обрабатывать или выполнять какую-либо сложную бизнес-логику. Нам просто нужно быстро получить данные в HTML.

  3. В некоторых критических для производительности случаях нам необходимо загрузить результаты агрегатов SQL, которые не соответствуют никаким свойствам модели.

  4. Нам нужен расширяемый способ ввода любых новых пользовательских данных, если это необходимо.

Как вы обычно решаете эту проблему, не слишком много работая с ORM (например, необработанные данные из базы данных)? Я уверен, что это обсуждалось много раз, но я не могу найти хороший запрос Google, чтобы найти что-нибудь полезное.

Редактировать : Поскольку позже я понял, что вопрос не очень хорошо сформулирован, я решил переформулировать его и начать новый .

Ответы [ 3 ]

2 голосов
/ 24 ноября 2009

Если вы просто получаете реляционные данные в браузер и из него, с небольшим или отсутствующим поведением между ними, похоже, что вы пытаетесь решить реляционную проблему с помощью парадигмы ОО.

Я мог бы вообще отказаться от объектно-ориентированного подхода.

Моя команда недавно переписала приложение, спросив: "Какова самая простая вещь, которая может работать?" и «Какой самый близкий язык к проблеме?». Наше новое приложение, заменяющее OO, оказалось в 10 раз меньше, быстрее и дешевле.

Мы использовали SQL, хранимые процедуры, библиотеки XML на сервере БД, XSLT (для получения HTML) и javascript.

0 голосов
/ 08 марта 2009

На мой взгляд, лучшая практика заключается в том, что ваше приложение использует данные, используя шаблон Domain Model . Модель предметной области может предлагать методы бизнес-логики для выполнения запросов, которые имеют смысл и соответствуют потребностям вашего приложения.

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

Но кроме того, модель предметной области может предоставлять методы, которые извлекают результаты только для чтения, которые слишком сложны, чтобы их можно было легко сохранить обратно в базу данных. Это включает в себя ваш пример сгруппированных результатов сводных запросов, а также включает объединенные наборы результатов запросов, выражения в виде столбцов и т. Д.

Шаблон модели предметной области предлагает способ отделить ОО-проект приложения от дизайна физической базы данных.

0 голосов
/ 06 марта 2009

ООП-пурист, как и я, пошел бы к шаблону Decorator. http://en.wikipedia.org/wiki/Decorator_pattern

Но дело в том, что некоторым людям может не понадобиться гибкость, которую он предлагает. Кроме того, создание новых классов для каждой отдельной операции может показаться излишним, но это обеспечивает хорошую проверку типов компиляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...