Рассмотрим базовые 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
Просто определите то, что Вы делаете без обиняков. Когда Вы говорите, что вещи businesswise, как "заставляют их пострадать", "крадут те деньги", "уничтожают эту часть земли", Вы говорите о бизнес-слое. Для прояснения дела, которые получают Вас взволнованный, идут сюда.
, Когда Вы говорите, "показывают это здесь", "не показывают это", "делают это более красивым", Вы говорите об уровне представления. Это вещи, которые взволновали Ваших разработчиков.
, Когда Вы говорите, вещи как "сохраняют это", "получают это от базы данных", "обновление", "удалите", и т.д. Вы говорите о слое данных. Это вещи, которые говорят Вам, что сохранить навсегда любой ценой.
Упростить вещи до одной строки...
Бизнес-логика была бы кодом, который не зависит от изменения с определенной деталью UI/реализации.. Это - представление кода правил, процессов, и т.д. которые определяются/отражение смоделированным бизнесом.
Я думаю Вы путающий бизнес-логику с Вашими требованиями к приложению. Это не то же самое. Когда кто-то объясняет логику его бизнеса, это - что-то как:
, "Когда пользователь покупает изделие, он должен предоставить информацию о доставке. Информация проверена с x y z правила. После этого он получит счет и заработает очки, который дает x % в скидках за предложения y" (извините для плохого примера)
, Когда Вы реализуете это бизнес-правила, необходимо будет думать во вторичных требованиях, как то, как информация представлена, как это будет сохранено персистентным способом, связью с серверами приложений, как пользователь получит счет и так далее. Все это требования не являются частью бизнес-логики и должны быть разъединены от нее. Таким образом, когда изменение бизнес-правил Вы адаптируете свой код с меньшим усилием. Это - факт.
Иногда представление копирует часть бизнес-логики, главным образом в проверке ввода данных пользователем. Но это должно также присутствовать в слое бизнес-логики. В других ситуациях, необходимо для перемещения некоторой бизнес-логики в Базу данных, для проблем производительности. Это обсуждено Martin Fowler здесь .
Вероятно, легче запуститься путем высказывания, что не бизнес-логика. Доступ к базе данных или доступ к диску не являются бизнес-логикой. UI не является бизнес-логикой. Сетевая связь не является бизнес-логикой.
мне, бизнес-логика является правилами, которые описывают, как бизнес работает, не, как программная архитектура работает. Бизнес-логика также имеет тенденцию измениться. Например, это может быть бизнес-требование, что каждому клиенту связали единственную кредитную карту с их учетной записью. Это требование может измениться так, чтобы у клиентов могло быть несколько кредитных карт. В теории это должно просто быть изменением в бизнес-логике, и другие части Вашего программного обеспечения не будут затронуты.
, Таким образом, это - теория. В реальном мире (поскольку Вы нашли) бизнес-логика имеет тенденцию распространяться всюду по программному обеспечению. В примере выше, необходимо будет, вероятно, добавить другую таблицу к базе данных для содержания дополнительных данных кредитной карты. Необходимо будет, конечно, изменить UI.
пуристы говорят, что бизнес-логика должна всегда быть абсолютно отдельной и так даже была бы против именования таблиц "Клиентами" или "Учетными записями" в базе данных. Взятый к его экстремальному значению Вы закончили бы с невероятно универсальный, невозможный обслужить систему.
существует определенно веский довод в пользу держания вместе большей части Вашей бизнес-логики вместо того, чтобы мазать его по всей системе, но (как с большинством теорий) необходимо быть прагматически настроены в реальном мире.
Мне не нравятся названия BLL+DAL слоев, они более сбивают с толку, чем разъяснение.
Вызов это DataServices и DataPersistence. Это поможет.
Сервисы управляют, уровень персистентности ПРЕВРАЩАЕТ В ТВОРОГ (Создайте, Чтение, Обновление, Удалите)
Бизнес-логика является чистой абстракцией, она существует независимая от материализации/визуализации данных перед Вашим пользователем и независимая от персистентности базовых данных.
, Например, в программном обеспечении Tax Preparation, одна ответственность занятий по бизнес-логике была бы вычисление бывшего должного налога. Они не были бы ответственны за отображение отчетов или сохранение и получение налоговой декларации.
<час>@Lars, "сервисы" подразумевают определенную архитектуру.
Для меня, " бизнес-логика " составляет все объекты, которые представляют данные, применимые к проблемной области, а также логике, которая выбирает, "что действительно делает с данными"..
, Таким образом, это должно действительно состоять из "транспорта данных" (не доступ) и "манипулирование данными".. На самом деле доступ к данным (материал, поражающий DB), должен быть в другом слое, как должен код представления.
Если это содержит что-нибудь о вещах как форма, кнопке, и т.д. это не бизнес-логика, это - уровень представления. Если это содержит персистентность зарегистрировать или база данных, это - DAL. Что-либо промежуточное является бизнес-логикой. В действительности, что-либо, неUI иногда называют "бизнес-логикой", но это должно быть что-то, что касается проблемной области, не обслуживания.