В Управляемом Доменом Дизайне можно ли использовать доменные объекты в UI?

Я заблудился в том, как написать функцию python, которая проходит по каждой строке и создает матрицу 3 на 3.

blockquote>

Я понял, что вы уже имели дело со статистической частью проблемы (например, вычислением вероятностей из распределения Пуассона), я прав?

Если это так, вы можете использовать [114 ] itertools product для создания вашей таблицы.
Допустим, что prob_a и prob_b - это два массива, содержащие вероятности для команды A и команды B соответственно. Матрица построена следующим образом:

from itertools import product
import numpy as np

prod_table = np.array([(i*j) for i, j in product(prob_b, prob_a)])
prod_table.shape = (4, 4)

Теперь у вас есть матрица 4x4 со всеми необходимыми значениями, которую вы можете преобразовать обратно в кадр данных pandas.
В этой таблице вероятности Team A - это индексы столбцов, вероятности Team B - индексы строк (что должно соответствовать вашему примеру). Таким образом, чтобы получить фрейм данных для панд, вы можете сделать:

prob_df = pd.DataFrame(prod_table, index=prob_b, columns=prob_a)

И это таблица, которую вы ищете.

11
задан Mark Rogers 22 April 2009 в 20:29
поделиться

6 ответов

DDD - это способ мышления при разработке программного обеспечения, которое начинается с моделирования области. Как сказано на веб-странице :

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

Одна вещь, которая естественным образом следует из этого шаблона проектирования, это многоуровневая архитектура. Как сказано в Сводка по шаблонам DDD

Разбиение сложной программы на СЛОИ. Разработка дизайна в каждом СЛОЙ, который является связным и зависит только от слоев ниже. Следуйте стандартным архитектурным образцам обеспечить слабую связь с слоями выше. Сконцентрируйте весь код связанные с моделью предметной области в одном слой и изолировать его от пользователя интерфейс, приложение и код инфраструктуры. Домен объекты, свободные от ответственности показ себя, хранение сами, управляющие приложением задачи и т. д. могут быть сосредоточены на выражая модель предметной области. это позволяет модели развиваться, чтобы быть богатым достаточно и достаточно ясно, чтобы захватить необходимые знания бизнеса и положить это сработает.

Нужно ли иметь экранные объекты для этого? Это всего лишь один из способов реализации этого, но, возможно, даже не лучший способ обеспечить слабую связь. Что касается примера: может быть, слой представления - это всего лишь веб-браузер и файлы xlt для визуализации XML-файлов, излучаемых бизнес-уровнем? Если у кого-то есть более подходящие примеры, пожалуйста, добавьте их. Я хочу сказать, что DDD подчеркивает многоуровневую архитектуру, но не ограничивает это одним возможным решением.

7
ответ дан 3 December 2019 в 03:37
поделиться

В проекте MVC вы, как правило, имеете отображение из репозитория -> Доменные модели, а затем из Доменных моделей -> Просмотр моделей. Хотя модели просмотра часто содержат доменные объекты.

3
ответ дан 3 December 2019 в 03:37
поделиться

Если вы делаете паттерн MVC, вам нужно просматривать объекты; DDD это просто ваша модель. Это не значит, что вы должны всегда использовать MVC; DDD может быть построен, скажем, как симулятор, где все, на что вы смотрите, - это сообщения журнала. Но в MVC у вас действительно должны быть отдельные объекты вида.

Теперь спросите себя, почему это так? Ответ заключается в том, что представление может измениться, даже если бизнес-модель не изменится . Модель DDD должна выражать, с точки зрения бизнеса, то, что важно для бизнеса.

8
ответ дан 3 December 2019 в 03:37
поделиться

Ответ довольно прост:

  • Объекты предметной области имеют дизайн и методы, ориентированные на предметную область.
  • Объекты представления имеют дизайн и методы, ориентированные на представление / управление.

Если вы можете использовать объекты своей области в представлении, возможно, они не совсем ориентированы на предметную область.

1
ответ дан 3 December 2019 в 03:37
поделиться

Я действительно не начинал понимать, почему и как можно отделить модель предметной области от проблем представления, пока я не начал следить за работой Грега Янга и Уди Дахана (через Мартина Фаулера).

Они учили принципу, известному как Разделение ответственности за команды и запросы (CQRS).

Моя интерпретация CQRS заключается в том, что есть два набора обязанностей, которые могут тянуть модель предметной области в разных направлениях , в результате получилась модель, которая не очень хорошо справляется с обеими задачами. Две обязанности - это команды (то есть поведение, которое может вызвать запись в базу данных) и запросы (то есть чтение из базы данных с целью получения данных для использования пользовательским интерфейсом). Примером может быть добавление геттеров и сеттеров к вашим объектам для поддержки привязки данных в пользовательском интерфейсе. Если в вашей модели есть геттеры и сеттеры, он, вероятно, плохо справится с моделированием изменений состояния, которые должны происходить в транзакциях, или с инкапсуляцией бизнес-логики. У него также не будет способа моделирования бизнес-контекста изменений состояния (см. Источники событий).

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

Решение как предписано CQRS, заключается в создании одной модели для команд и другой для запросов. Если в вашей текущей модели есть методы для изменения состояния (т. Е. Поведения в модели) и геттеры, которые предоставляют состояние пользовательскому интерфейсу для привязки данных, вы бы реорганизовали эти две обязанности в отдельные модели для команд и запросов. Модель запроса не будет сопоставлена ​​с сущностями вашего домена, а будет напрямую связана с базой данных. Если ваша база данных не захватывает производное состояние из вашей модели предметной области,

8
ответ дан 3 December 2019 в 03:37
поделиться

Объекты домена на самом деле являются внутренней логикой внутри вашего уровня бизнес-логики. Они не должны напрямую открываться вашим клиентам (уровень пользовательского интерфейса). Вместо этого инкапсулируйте использование вашей модели предметной области в сервисы приложения. Службы приложений могут использовать облегченные DTO и / или командные объекты для передачи данных и намерений между клиентом и моделью предметной области.

0
ответ дан 3 December 2019 в 03:37
поделиться
Другие вопросы по тегам:

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