У меня есть приложение MVC, написанное с Zend Framework, которое извлекает данные из базы данных Oracle 10g и отображает эти данные в таблицах и списках и визуально обогащает эти данные с помощью цветов и диаграмм. Нет ORM и не задействовано создание, обновление или удаление, просто чистое чтение. Данные вставляются из другого приложения. Данные в БД моделируются после концепций, которые они представляют и получают доступ к представлениям БД, которые объединяют эти данные из разных других таблиц (устаревшие, не могут быть изменены), например.Как бы вы моделировали это приложение?
| Event ID | Start | End | Status | Created_By |
-----------------------------------------------------------------------------
| 12345678 | 2009-10-01 12:00:00 | 2009-10-01 12:15:00 | booked | John Doe |
| 12345679 | 2009-11-01 13:00:00 | 2009-12-01 12:00:00 | booked | John Doe |
| 12345680 | 2009-11-01 13:00:00 | 2009-12-01 12:00:00 | tba | Jane Doe |
Пользователи могут влиять на отображение, упорядочивание и сортировку столбцов из представления. Клиенты могут запрещать/разрешать доступ к столбцам и ограничивать содержимое столбца определенными значениями. Пользователи не могут переопределять настройки клиента. Пользователь - это актер, а клиент - это просто фильтр, который создает подмножество доступных данных для пользователя, принадлежащего клиенту. Настройки пользователя и клиента сохраняются.
Моего текущий подход работает примерно так:
Request --> Controller
| <--> sanitizes and returns Request params
| ---> Facade (capsules steps to fetch View Data)
| | <--> Table Data Gateway builds Query for requested View
| | <--> Query Decorator¹ applies User/Client settings
| | <--> DB Adapter fetches RecordSet from decorated Query
| <----returns Recordset
| <--> applies RecordSet to View
| <--> Data-Aware ViewHelper render RecordSet (and View)
Response <--returns rendered View
¹
Запросы Decorator можно прочитать в сохраненных настройках пользователя/клиента и добавить его в основном объект запроса, возвращенный TDG на лета.
Однако в последнее время я сомневаюсь в этом подходе и хочу его улучшить. Я предполагаю, что смогу полностью удалить TDG и полностью создать представление View полностью из пользовательского интерфейса; основанный только на структуре БД. Пользователям это наверняка понравится. Дело в том, что View должен много знать о данных. ViewHelpers должны знать имена столбцов, чтобы обогащать данные, и часто они делают это в отношении нескольких столбцов в наборах записей. Они не могут быть родовыми, и что-то говорит мне, что это все равно. Это похоже на мишмаш. Я просто не могу понять, почему.
Любые рисунки, идеи и мнения - очень ценятся. Я знаю, что вопрос несколько расплывчатый, но, как я уже сказал, я не могу определить, что заставляет меня сомневаться в этом. Поэтому я предполагаю, что я ищу подходящие подходы к созданию пользовательских и клиентских настраиваемых приложений, ориентированных на базу данных. Мне, конечно, не нужно решение, просто некоторые идеи и, возможно, несколько ссылок, чтобы посмотреть, как другие люди подходят к этой проблеме, поэтому я могу принять это во внимание при следующем рефакторинге.
Примечание
Я оставляю этот вопрос открытым на весь период до принятия ответа. Любой вход оценивается.
Пожалуйста, простите мой скептицизм, но: взгляд должен знать много о данных? ViewHelpers должны знать имена столбцов? * Почему? * Это почти похоже на эффект внутренней платформы, переосмысление Microsoft Access или Cognos. Настройка вне определенного порога - зло; это могут быть * требования *, которые нуждаются в рефакторинге. – Aaronaught
@ Скептицизм Аароношен в порядке. Именно это заставило меня задавать этот вопрос :) Отвечать на ваш вопрос: представьте, что есть ViewHelper, который отображает панель временной шкалы на основе * Start *, * End * и * Status * как часть таблицы, отображающей весь набор записей в дополнение к ViewHelper который отображает PieChart на основе * Created_By *. – Gordon