MVC: Повністю заселені моделі або частково заповнені моделі?


10

Цей так довго переслідував мене. Як ви робите програмування MVC, на вашу думку, це найкраща практика програмування? Чи варто використовувати повністю заселені моделі або частково заповнені моделі, особливо коли я знаю, що для цього конкретного завдання мені знадобляться лише 2 поля від об'єкта моделі, у якого є 5 інших?

Іноді просто здається злочинним заповнення списку з 20 модельних об'єктів усіма значеннями з бази даних, коли ви знаєте, що вам знадобиться лише декілька з них.

Звичайно, часткова модель означає, що вам доведеться записати ще один метод у свій DAO, крім того, який отримує все. Що означає більше коду для підтримки?

З іншого боку, витягнути все з БД із повністю заселеними моделями означає, що один метод служить усім, але це, очевидно, дасть вам високу ефективність роботи.

Я можу побачити, що ORM (наприклад, Hibernate або ActiveRecord of Rails) надає перевагу тенденціям програмування MVC та баз даних, таких як повні моделі BigTable від Google, є прийнятою тенденцією. Але що робити, якщо ви все ще використовуєте старий добрий JDBC?

Обладнання дешеве, розробка дороге. Це дійсно так, навіть коли програмі потрібно масштабувати до кількох сотень тисяч запитів на годину?


1
"З іншого боку, витягнути все з БД з повністю заселеними моделями означає, що один метод служить усім, але це, очевидно, дасть вам високу ефективність роботи". Чи оцінювали ви якісь ефективні результати роботи від цієї практики?
S.Lott

>> Дійсно? Ви оцінювали якісь ефективні результати роботи від цієї практики? << - Я очікував цього. Ні, я ні. Але було б цікаво вимірювати і доводити неправильно інакше.
Pritam Barhate

Важко довести, що накладні витрати не існують. Ви можете легко посперечатися на безліч деталей, стверджуючи, що вимірювання не дійсні для певної ситуації. Набагато приємніше, якщо ви використовуєте "типову" настройку бази даних, мову додатків тощо, і профіліруєте свою бажану конфігурацію, щоб показати, що таке фактичні накладні витрати, тому нам не доведеться кайфувати над різними факторами, які ми залишили поза нашими вимірюваннями .
S.Lott

1
Я знайшов чудову статтю, яка висвітлює питання про розкриття вашої доменної моделі проти надсилання DTO за адресою msdn.microsoft.com/en-us/magazine/ee236638.aspx .
Mayo

Відповіді:


3

У вас є два варіанти:

1) Залиште деякі поля в моделі незаповненими

2) Створіть додаткову «легку» модель для вашої конкретної ситуації

Кого вибрати, залежить знову від двох речей:

а) Скільки полів "повної" моделі буде проігноровано

б) як часто ця "легка" модель буде приміркована

Якщо є лише кілька і більше полів, які можна заповнити, добре перейти з 1).

Якщо б) є лише винятковою індивідуальною ситуацією, можливо, немає сенсу створювати додаткову модель лише для одного випадку використання.

Інший підхід полягає у визначенні моделі "lite" та успадкуванні від неї "повної" моделі.


Дякую за відповідь. Має сенс скласти легку модель залежно від потреби. Але іноді мені цікаво, чи не створить така стратегія занадто багато модельних класів? Особливо, якщо я роблю моделі, характерні для поглядів, а не моделі, характерні для ділової логіки.
Pritam Barhate

3

Якщо для перегляду потрібні лише 2 властивості моделі, ви (мабуть) маєте неправильну модель для цього випадку використання! Я хотів би створити модель відповідно до поданого вигляду, зберегти зайві пошукові записи БД і лише заповнити потрібні вам дані. Якщо наступний огляд потребує більш детальної інформації, то ви повинні запитати, чи я отримаю додаткові дані пізніше, чи мені слід все це зробити наперед ...

В якості альтернативи ви можете розглянути якусь ледачу оцінку, тому значення заповнюються тоді, коли вам це потрібно. Це може працювати добре, але, очевидно, більше роботи і може призвести до багаторазових поїздок до БД, що не є великим, якщо ви в кінцевому підсумку робите це багато.

Однак, якщо ви в основному вибираєте кілька додаткових полів із таблиці або перегляду, тоді вартість отримання додаткових даних до всіх намірів і цілей дорівнює нулю (ОК, на провід є більше байтів, але найбільші витрати, ймовірно, є бути у створенні та розриві з'єднання), тому, якщо є шанс, вам знадобляться додаткові дані, я б, ймовірно, повністю заповнив модель, як тільки ви щасливі, що ви маєте потрібну модель .

Обладнання дешеве, але жодна кількість обладнання не може привести до поганого дизайну.


2
>> Якщо для перегляду потрібні лише 2 властивості моделі, ви маєте неправильну модель! << - Не треба бути зубцем завжди. Типовий випадок показує список результатів пошуку в бізнес-програмах. Наприклад, у CRM - клієнті - в одному з пошукових записів здебільшого одне ім’я та одне або 2 важливі поля. Але у CRM буде досить багато інших полів, пов’язаних із цим клієнтом.
Барріт Прітам

1
Питання говорить, що в цьому випадку потрібні лише 2 властивості.
Стів

-2

Модель - це не DAO.

І інша річ: якщо ви говорите, що у вас є 20 моделей (клієнти, зі свого прикладу), то це не модель MVC. Модель домену не відображається безпосередньо в одному рядку таблиці. Натомість він повинен відповідати за всі операції, здійснені з вашими "замовниками".

У вашому прикладі "Клієнт" - це не доменна модель, а просто об'єкт всередині моделі.

Що стосується взаємодії з базою даних, то ця відповідальність повинна бути делегована об’єкту картографії даних , який повинен знати, як зберігати та отримувати ваші екземпляри класу клієнтів.


PS якщо у вас є логіка бази даних всередині моделі, то вона підштовхне логіку бізнесу домену в контролер.
mefisto

1
Один клас, який робить все для клієнтів - погана ідея, оскільки це буде важко підтримувати.
Енді
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.