MVC, куда классы идут?

Проблема с вашей функцией обновления. Вы должны добавить его к указателю на A.

func (a *A) updateB(n int) {
    a.b.c = n
}
5
задан Teifion 26 September 2008 в 09:46
поделиться

5 ответов

Модель является неправильным словом для использования при обсуждении, что сделать с продуктами: каждым продуктом является объект значения (VO) (или передача данных objet/DTO, независимо от того, что помещается в Ваш рот лучше). Объекты значения обычно имеют те же поля, которые содержит таблица. В Вашем случае ProductVO должен иметь поля, которые находятся в таблице продуктов.

Модель является Объектом доступа к данным (DAO), который имеет методы как

findByPk --> returns a single value object
findAll --> returns a collection of value objects (0-n)
etc.

В Вашем случае у Вас был бы ProductDAO, который имеет что-то как вышеупомянутые методы. Этот ProductDAO затем возвратил бы ProductVO и наборы их.

Объекты Доступа к данным могут также возвратить Бизнес-объекты (BO), которые могут содержать несколько и дополнительные методы VO, которые являются конкретной экономической моделью.

Приложение: В Вашем контроллере Вы называете ProductDAO для нахождения продуктов, которые Вы хотите. Возвращенные ProductVO (s) затем передаются представлению (как атрибуты запроса в Java). Представление затем циклы через/дисплеи данные из productVO's.

4
ответ дан 13 December 2019 в 22:19
поделиться

Модель является частью Вашего приложения, где бизнес-логика происходит. Модель представляет реальные отношения и зависимости между объектами, как: Сотрудник сообщает менеджеру, менеджер контролирует многих Сотрудников, менеджер может присвоить Задачу Сотруднику, Задача отсылает уведомление, когда запоздалый. Образцовый CAN и чаще всего взаимодействует через интерфейс с базой данных, но это не требование.

Представление - в основном все, что может быть отображено или справка в отображении. Представление содержит шаблоны, объекты шаблона, обрабатывает шаблонный состав и вложение, переносится с заголовками и нижними колонтитулами, и производит вывод в одном из известных форматов (X/HTML, но также и XML, RSS/Atom, CSV).

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

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

3
ответ дан 13 December 2019 в 22:19
поделиться

В CakePHP существует еще 3 "части":

  1. Поведения
  2. Компоненты
  3. Помощники

Логика, которые используются многими моделями, должна быть сделана как поведение. Я не знаю, имеют ли CodeIgniter эту логику или нет, но если бы она не делает, я попытался бы реализовать ее как таковой. Можно читать о поведениях здесь.

(Компоненты помогают контроллеру совместно использовать логику, и помощники помогают представлениям таким же образом).

1
ответ дан 13 December 2019 в 22:19
поделиться

Самый простой путь к:

  1. Имейте образцовый класс таблица для каждой базы данных. В этом случае это был бы объект, который содержал все Сведения о продукте.
  2. Поместите эти классы в пакет/пространство имен, например, com.company.model (Java / C#)
  3. Поместите классы ДАО в пакет как com.company.model.dao
  4. Ваше представление использует данные из сессии/запроса/контроллера В этом случае, у меня был бы Список <продукт>.
  5. О, Вы используете PHP. Не знайте, как это изменяет вещи, но я предполагаю, что это имеет платформу Наборов как любой современный язык.
1
ответ дан 13 December 2019 в 22:19
поделиться

@Alexander упоминает Поведения CakePHPs, Компоненты и Помощников. Они превосходны для абстракции общей функциональности. Я нахожу Поведения особенно полезными с курса, объем бизнес-логики несут в моделях. Я в настоящее время работаю над проектом, где у нас есть поведения как:

  • Блокируемый
  • Пригодный для печати
  • Tagable
  • Подлежащий обложению налогом
  • Commentable

и т.д.

Для кода, который превышает даже платформу MVC т.е. библиотеки кода, которыми Вы пользуетесь для различных вещей, которые не связаны к конкретной платформе, которую Вы используете - в наших вещах случая как классы кодирования видео и т.д. CakePHP имеет папку поставщиков.

Что-либо, что эффективно не имеет никакого отношения к CakePHP, идет туда.

Я подозреваю, что CodeIgniter не имеет вполне столь же гибкой структуры, это меньше и легче, чем CakePHP, но беглый взгляд на Руководство CakePHP, чтобы видеть, как Поведения, Компоненты, Помощники и папка Vendors могут быть полезными.

Это должен быть легкий вопрос, чтобы просто включать некоторые общие классы помощника из Ваших моделей, сохраняют хорошими и DRY

1
ответ дан 13 December 2019 в 22:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: