Вы можете просто избавиться от дубликатов столбцов в одном из фреймов данных, если вы говорите, что вам на самом деле их не интересует, и просто используете base::merge
:
set.seed(1)
df1 <- data.frame(id = sample(LETTERS,50,replace=T), val = rnorm(50), val1 = rnorm(50), stringsAsFactors = F)
df2 <- data.frame(id = sample(LETTERS,30,replace=T), val = rnorm(30), val2 = rnorm(30), stringsAsFactors = F)
duplicates = names(df1) == names(df2) & names(df1) !="id"
df2 = df2[,!duplicates]
df12 = base::merge.data.frame(df1, df2, by = "id")
head(df12)
Службы бывают трех видов: Службы домена , Службы приложений и Службы инфраструктуры ].
Сохранение доменных служб вместе с вашими объектами домена разумно - все они сосредоточены на логике домена. И да, вы можете добавлять репозитории в свои сервисы.
Прикладные службы обычно используют как доменные службы , так и репозитории для обработки внешних запросов.
Надеюсь, это поможет!
Думайте Доменный Сервис как объект, который реализует бизнес-логику или связанную с бизнес-правилами логику на объектах области, и эта логика является трудной вписаться в те же объекты области и также не вызывает изменение состояния доменного сервиса (доменный сервис является объектом без "состояния" или лучше без состояния, которое имеет бизнес, означающий) , но в конечном счете измените состояние только объектов области, на которые воздействует.
, В то время как Прикладная служба реализации применимая логика уровня как взаимодействие с пользователем, контроль ввода, логика, не связанная с бизнесом, но с другими проблемами: аутентификация, безопасность, пользование электронной почтой, и так далее.., ограничивая себя для простого использования сервисов, подвергнутых объектами области.
примером этого мог быть следующий сценарий thinked только для объяснения цели: мы должны реализовать очень небольшое народное служебное приложение, которое выполняет простую операцию, которая является, "включают световые сигналы, когда кто-то открывает дверь комнаты дома, чтобы войти в и выключить свет когда завершения дверь, выходящая из комнаты".
Упрощение много мы рассматриваем только 2 доменных объекта: Door
и Lamp
, у каждого из них есть 2 состояния, соответственно open/closed
и on/off
, и определенные методы для работы изменениями состояния на них.
В этом случае нам нужен доменный сервис, который выполняется, определенная операция включают свет, когда кто-то открывает дверь от внешнего для ввода в комнату, , потому что дверь и объекты лампы не могут реализовать эту логику способом, что мы рассматриваем подходящий для их характера .
Мы можем назвать наш доменный сервис как [1 132] DomoticDomainService
и реализовать 2 метода: OpenTheDoorAndTurnOnTheLight
и CloseTheDoorAndTurnOffTheLight
, эти 2 метода соответственно изменяют состояние обоих объектов Door
и Lamp
к [1 135] open/on
и closed/off
.
состояние входит или выходит из комнаты, оно не присутствует в доменном объекте службы и любом в объектах области, но будет реализовано как простое взаимодействие с пользователем прикладной службой, которую мы можем назвать HouseService
, который реализует некоторые обработчики событий как [1 138] onOpenRoom1DoorToEnter
и onCloseRoom1DoorToExit
, и так далее для каждой комнаты (это - только пример для объяснения цели..) , который будет соответственно касаться о сервисных методах домена вызова для выполнения посещенного поведения (мы не рассмотрели объект Room
, потому что это - только пример) .
Этот пример, далеко чтобы быть хорошо разработанным приложением реального мира, имеет единственную цель (как больше раз сказанный) для объяснения, что Доменный Сервис и его различие от Прикладной службы, надежда, это ясно и полезно.