2013-09-18 3 views
0

Я работаю над настольным графическим интерфейсом (Qt + Python), которое обрабатывает счета-фактуры. До сих пор у меня было 2 вида объектов:Какой шаблон выбрать?

  • ORM классы, которые описывают счета-фактуры, продукты, клиенты, то есть модели.

  • Виды, которые позволяют просматривать \ редактировать модели.

Каждая модель может иметь несколько видов.

И я получил эти виды кода:

  1. код, который инициализирует модель («При создании нового счета-фактуры, дата счетов-фактуры должна быть сегодня»)
  2. кода, который реагирует на изменения пользователя в вид («Когда клиент выбран, установите соответствующий уровень цен и пересчитать все цены и суммы»)
  3. кода, который делает очевидную проверку на лета («дата счета не может быть пустым ! продукт должен быть выбран ! ")
  4. Код, подтверждающий выставление счета-фактуры в соответствии с бизнес-правилами («Продукт нет на складе», «Сумма продажи превышает кредит клиента»).

Итак, вопрос в том, какой шаблон дизайна выбрать? Целью было бы избегать дублирования кода и допускать быстрые изменения моделей и представлений. До сих пор я думал о простом подходе к моделированию, причем 1 & 4 принадлежал самой модели. Но 2 & 3 дайте мне паузу. Должен ли я использовать MVC и поставить 2 & 3 в контроллер? Есть предположения? Благодаря!

ответ

0

Я думаю, глядя на Ответственности Command Query Сегрегация (CQRS) модель будет ценным для вас: http://martinfowler.com/bliki/CQRS.html

У вас есть модели, которые взгляды и модели, которые являются объектами. Логика модели представления не должна быть отправлена ​​в контроллер, контроллер должен отправлять ей события.

Итак, в вашем примере # 2 вы говорите: если выбран клиент, задайте соответствующий уровень цен и пересчитайте ... Клиент, выбранный «выбран», является частью какого-либо объекта домена, будь то «заказ» или «транзакция» или некоторые такие. Этот объект домена не может быть объектом Order, а является видом домена OrderProcess, который имеет связку связанных с ним «представлений» (например, прайс-листы).

+0

Спасибо, я прочитал. AFAIU, эта модель предлагает введение второй модели, которой поручено выполнение валидации \ принудительных БР и т. Д., Оставляя первую модель для чтения данных из БД. Может, мне чего-то не хватает, но как это приносит пользу моему сценарию? Дело не в том, что моя функция чтения настолько сложна, что требуется отдельная модель. – AlexVhr

+0

Хорошо, так называется «пересчитанный прайс-лист» только список сущностей из базы данных? Там есть какая-то модель домена, и эта модель домена должна решать, какие объекты нужно обновлять, когда клиент выбрал действие, поступающее с контроллера. –

+0

Model! = Объект базы данных, он может, но чаще он имеет больше сложности. –

Смежные вопросы