Что точно состоит из 'Бизнес-логики' в приложении?

Рассмотрим базовые R by (объектно-ориентированная оболочка для tapply):

Данные (посеяны для воспроизводимости)

set.seed(3219)
df <- data.frame(group = rep(1:4, each = 10), 
                   x1 = rnorm(40),  x2 = rnorm(40), x3 = rnorm(40), x4 = rnorm(40), 
                   X5 = rnorm(40), x6 = rnorm(40), x7 = rnorm(40))

by

by_list <- by(df, df$group, function(sub) 
    sapply(sub[, 4:ncol(sub)], function(x) sd(x)/mean(x))
)

# LIST
by_list 
# df$group: 1
#        x3        x4        X5        x6        x7 
# -1.077354  2.252270 -2.256086 -1.716327 -5.273771 
# ------------------------------------------------------------ 
# df$group: 2
#         x3         x4         X5         x6         x7 
#   2.580065   5.054094 -10.985927  32.716116   6.732901 
# ------------------------------------------------------------ 
# df$group: 3
#         x3         x4         X5         x6         x7 
#  -3.523565  -1.670539  -5.042595  -7.787303 -15.486737 
# ------------------------------------------------------------ 
# df$group: 4
#        x3        x4        X5        x6        x7 
# -5.597470 -9.842997  1.985010 33.657188  2.629724 

# MATRIX
do.call(rbind, by_list)

#          x3        x4         X5        x6         x7
# 1 -1.077354  2.252270  -2.256086 -1.716327  -5.273771
# 2  2.580065  5.054094 -10.985927 32.716116   6.732901
# 3 -3.523565 -1.670539  -5.042595 -7.787303 -15.486737
# 4 -5.597470 -9.842997   1.985010 33.657188   2.629724
15
задан Rob Cooper 2 September 2008 в 11:46
поделиться

8 ответов

Просто определите то, что Вы делаете без обиняков. Когда Вы говорите, что вещи businesswise, как "заставляют их пострадать", "крадут те деньги", "уничтожают эту часть земли", Вы говорите о бизнес-слое. Для прояснения дела, которые получают Вас взволнованный, идут сюда.

, Когда Вы говорите, "показывают это здесь", "не показывают это", "делают это более красивым", Вы говорите об уровне представления. Это вещи, которые взволновали Ваших разработчиков.

, Когда Вы говорите, вещи как "сохраняют это", "получают это от базы данных", "обновление", "удалите", и т.д. Вы говорите о слое данных. Это вещи, которые говорят Вам, что сохранить навсегда любой ценой.

43
ответ дан 30 November 2019 в 23:59
поделиться

Упростить вещи до одной строки...
Бизнес-логика была бы кодом, который не зависит от изменения с определенной деталью UI/реализации.. Это - представление кода правил, процессов, и т.д. которые определяются/отражение смоделированным бизнесом.

5
ответ дан 30 November 2019 в 23:59
поделиться

Я думаю Вы путающий бизнес-логику с Вашими требованиями к приложению. Это не то же самое. Когда кто-то объясняет логику его бизнеса, это - что-то как:

, "Когда пользователь покупает изделие, он должен предоставить информацию о доставке. Информация проверена с x y z правила. После этого он получит счет и заработает очки, который дает x % в скидках за предложения y" (извините для плохого примера)

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

Иногда представление копирует часть бизнес-логики, главным образом в проверке ввода данных пользователем. Но это должно также присутствовать в слое бизнес-логики. В других ситуациях, необходимо для перемещения некоторой бизнес-логики в Базу данных, для проблем производительности. Это обсуждено Martin Fowler здесь .

5
ответ дан 30 November 2019 в 23:59
поделиться

Вероятно, легче запуститься путем высказывания, что не бизнес-логика. Доступ к базе данных или доступ к диску не являются бизнес-логикой. UI не является бизнес-логикой. Сетевая связь не является бизнес-логикой.

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

, Таким образом, это - теория. В реальном мире (поскольку Вы нашли) бизнес-логика имеет тенденцию распространяться всюду по программному обеспечению. В примере выше, необходимо будет, вероятно, добавить другую таблицу к базе данных для содержания дополнительных данных кредитной карты. Необходимо будет, конечно, изменить UI.

пуристы говорят, что бизнес-логика должна всегда быть абсолютно отдельной и так даже была бы против именования таблиц "Клиентами" или "Учетными записями" в базе данных. Взятый к его экстремальному значению Вы закончили бы с невероятно универсальный, невозможный обслужить систему.

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

9
ответ дан 30 November 2019 в 23:59
поделиться

Мне не нравятся названия BLL+DAL слоев, они более сбивают с толку, чем разъяснение.
Вызов это DataServices и DataPersistence. Это поможет.

Сервисы управляют, уровень персистентности ПРЕВРАЩАЕТ В ТВОРОГ (Создайте, Чтение, Обновление, Удалите)

1
ответ дан 30 November 2019 в 23:59
поделиться

Бизнес-логика является чистой абстракцией, она существует независимая от материализации/визуализации данных перед Вашим пользователем и независимая от персистентности базовых данных.

, Например, в программном обеспечении Tax Preparation, одна ответственность занятий по бизнес-логике была бы вычисление бывшего должного налога. Они не были бы ответственны за отображение отчетов или сохранение и получение налоговой декларации.

<час>

@Lars, "сервисы" подразумевают определенную архитектуру.

0
ответ дан 30 November 2019 в 23:59
поделиться

Для меня, " бизнес-логика " составляет все объекты, которые представляют данные, применимые к проблемной области, а также логике, которая выбирает, "что действительно делает с данными"..

, Таким образом, это должно действительно состоять из "транспорта данных" (не доступ) и "манипулирование данными".. На самом деле доступ к данным (материал, поражающий DB), должен быть в другом слое, как должен код представления.

0
ответ дан 30 November 2019 в 23:59
поделиться

Если это содержит что-нибудь о вещах как форма, кнопке, и т.д. это не бизнес-логика, это - уровень представления. Если это содержит персистентность зарегистрировать или база данных, это - DAL. Что-либо промежуточное является бизнес-логикой. В действительности, что-либо, неUI иногда называют "бизнес-логикой", но это должно быть что-то, что касается проблемной области, не обслуживания.

0
ответ дан 30 November 2019 в 23:59
поделиться
Другие вопросы по тегам:

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