From e9d497e6f134da75c161780b41277b5752bc2271 Mon Sep 17 00:00:00 2001 From: yandajun Date: Wed, 14 Aug 2019 19:00:08 +0800 Subject: [PATCH 1/4] Hexagonal Architecture --- .../baeldung/controller/FriendController.java | 21 +++++++++++++++++++ .../main/java/com/baeldung/domain/Friend.java | 12 +++++++++++ .../baeldung/repository/FriendRepository.java | 10 +++++++++ .../repository/FriendRepositoryAdapter.java | 19 +++++++++++++++++ .../repository/FriendRepositoryPort.java | 9 ++++++++ .../service/FriendServiceAdapter.java | 20 ++++++++++++++++++ .../baeldung/service/FriendServicePort.java | 9 ++++++++ 7 files changed, 100 insertions(+) create mode 100644 spring-boot-data/src/main/java/com/baeldung/controller/FriendController.java create mode 100644 spring-boot-data/src/main/java/com/baeldung/domain/Friend.java create mode 100644 spring-boot-data/src/main/java/com/baeldung/repository/FriendRepository.java create mode 100644 spring-boot-data/src/main/java/com/baeldung/repository/FriendRepositoryAdapter.java create mode 100644 spring-boot-data/src/main/java/com/baeldung/repository/FriendRepositoryPort.java create mode 100644 spring-boot-data/src/main/java/com/baeldung/service/FriendServiceAdapter.java create mode 100644 spring-boot-data/src/main/java/com/baeldung/service/FriendServicePort.java diff --git a/spring-boot-data/src/main/java/com/baeldung/controller/FriendController.java b/spring-boot-data/src/main/java/com/baeldung/controller/FriendController.java new file mode 100644 index 000000000000..a704e355cdec --- /dev/null +++ b/spring-boot-data/src/main/java/com/baeldung/controller/FriendController.java @@ -0,0 +1,21 @@ +package com.baeldung.controller; + +import com.baeldung.domain.Friend; +import com.baeldung.service.FriendServicePort; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +@RestController("/friend") +public class FriendController { + + @Resource + private FriendServicePort friendServicePort; + + @GetMapping("/list") + public List list(Long id) { + return friendServicePort.list(id); + } +} diff --git a/spring-boot-data/src/main/java/com/baeldung/domain/Friend.java b/spring-boot-data/src/main/java/com/baeldung/domain/Friend.java new file mode 100644 index 000000000000..e06585dc6a8a --- /dev/null +++ b/spring-boot-data/src/main/java/com/baeldung/domain/Friend.java @@ -0,0 +1,12 @@ +package com.baeldung.domain; + +import lombok.Data; + +@Data +public class Friend { + private Long id; + private String name; + private Integer age; + private Byte sex; + // standard setters and getters +} diff --git a/spring-boot-data/src/main/java/com/baeldung/repository/FriendRepository.java b/spring-boot-data/src/main/java/com/baeldung/repository/FriendRepository.java new file mode 100644 index 000000000000..48f8d028448e --- /dev/null +++ b/spring-boot-data/src/main/java/com/baeldung/repository/FriendRepository.java @@ -0,0 +1,10 @@ +package com.baeldung.repository; + +import com.baeldung.domain.Friend; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface FriendRepository extends JpaRepository { + List list(Long id); +} diff --git a/spring-boot-data/src/main/java/com/baeldung/repository/FriendRepositoryAdapter.java b/spring-boot-data/src/main/java/com/baeldung/repository/FriendRepositoryAdapter.java new file mode 100644 index 000000000000..1e4a59c4b880 --- /dev/null +++ b/spring-boot-data/src/main/java/com/baeldung/repository/FriendRepositoryAdapter.java @@ -0,0 +1,19 @@ +package com.baeldung.repository; + +import com.baeldung.domain.Friend; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +@Service +public class FriendRepositoryAdapter implements FriendRepositoryPort { + + @Resource + private FriendRepository friendRepository; + + @Override + public List list(Long id) { + return friendRepository.list(id); + } +} diff --git a/spring-boot-data/src/main/java/com/baeldung/repository/FriendRepositoryPort.java b/spring-boot-data/src/main/java/com/baeldung/repository/FriendRepositoryPort.java new file mode 100644 index 000000000000..778f363404be --- /dev/null +++ b/spring-boot-data/src/main/java/com/baeldung/repository/FriendRepositoryPort.java @@ -0,0 +1,9 @@ +package com.baeldung.repository; + +import com.baeldung.domain.Friend; + +import java.util.List; + +public interface FriendRepositoryPort { + List list(Long id); +} diff --git a/spring-boot-data/src/main/java/com/baeldung/service/FriendServiceAdapter.java b/spring-boot-data/src/main/java/com/baeldung/service/FriendServiceAdapter.java new file mode 100644 index 000000000000..3e564de0858a --- /dev/null +++ b/spring-boot-data/src/main/java/com/baeldung/service/FriendServiceAdapter.java @@ -0,0 +1,20 @@ +package com.baeldung.service; + +import com.baeldung.domain.Friend; +import com.baeldung.repository.FriendRepositoryPort; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +@Service +public class FriendServiceAdapter implements FriendServicePort { + + @Resource + private FriendRepositoryPort repositoryPort; + + @Override + public List list(Long id) { + return repositoryPort.list(id); + } +} diff --git a/spring-boot-data/src/main/java/com/baeldung/service/FriendServicePort.java b/spring-boot-data/src/main/java/com/baeldung/service/FriendServicePort.java new file mode 100644 index 000000000000..ee7b0054fe82 --- /dev/null +++ b/spring-boot-data/src/main/java/com/baeldung/service/FriendServicePort.java @@ -0,0 +1,9 @@ +package com.baeldung.service; + +import com.baeldung.domain.Friend; + +import java.util.List; + +public interface FriendServicePort { + List list(Long id); +} From a347ef6ba0461a6e0610d266656407452ccdacdb Mon Sep 17 00:00:00 2001 From: yandajun Date: Mon, 26 Aug 2019 11:21:51 +0800 Subject: [PATCH 2/4] delete all newly added classes --- .../baeldung/controller/FriendController.java | 21 ------------------- .../main/java/com/baeldung/domain/Friend.java | 12 ----------- .../baeldung/repository/FriendRepository.java | 10 --------- .../repository/FriendRepositoryAdapter.java | 19 ----------------- .../repository/FriendRepositoryPort.java | 9 -------- .../service/FriendServiceAdapter.java | 20 ------------------ .../baeldung/service/FriendServicePort.java | 9 -------- 7 files changed, 100 deletions(-) delete mode 100644 spring-boot-data/src/main/java/com/baeldung/controller/FriendController.java delete mode 100644 spring-boot-data/src/main/java/com/baeldung/domain/Friend.java delete mode 100644 spring-boot-data/src/main/java/com/baeldung/repository/FriendRepository.java delete mode 100644 spring-boot-data/src/main/java/com/baeldung/repository/FriendRepositoryAdapter.java delete mode 100644 spring-boot-data/src/main/java/com/baeldung/repository/FriendRepositoryPort.java delete mode 100644 spring-boot-data/src/main/java/com/baeldung/service/FriendServiceAdapter.java delete mode 100644 spring-boot-data/src/main/java/com/baeldung/service/FriendServicePort.java diff --git a/spring-boot-data/src/main/java/com/baeldung/controller/FriendController.java b/spring-boot-data/src/main/java/com/baeldung/controller/FriendController.java deleted file mode 100644 index a704e355cdec..000000000000 --- a/spring-boot-data/src/main/java/com/baeldung/controller/FriendController.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.baeldung.controller; - -import com.baeldung.domain.Friend; -import com.baeldung.service.FriendServicePort; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; - -import javax.annotation.Resource; -import java.util.List; - -@RestController("/friend") -public class FriendController { - - @Resource - private FriendServicePort friendServicePort; - - @GetMapping("/list") - public List list(Long id) { - return friendServicePort.list(id); - } -} diff --git a/spring-boot-data/src/main/java/com/baeldung/domain/Friend.java b/spring-boot-data/src/main/java/com/baeldung/domain/Friend.java deleted file mode 100644 index e06585dc6a8a..000000000000 --- a/spring-boot-data/src/main/java/com/baeldung/domain/Friend.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.baeldung.domain; - -import lombok.Data; - -@Data -public class Friend { - private Long id; - private String name; - private Integer age; - private Byte sex; - // standard setters and getters -} diff --git a/spring-boot-data/src/main/java/com/baeldung/repository/FriendRepository.java b/spring-boot-data/src/main/java/com/baeldung/repository/FriendRepository.java deleted file mode 100644 index 48f8d028448e..000000000000 --- a/spring-boot-data/src/main/java/com/baeldung/repository/FriendRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.baeldung.repository; - -import com.baeldung.domain.Friend; -import org.springframework.data.jpa.repository.JpaRepository; - -import java.util.List; - -public interface FriendRepository extends JpaRepository { - List list(Long id); -} diff --git a/spring-boot-data/src/main/java/com/baeldung/repository/FriendRepositoryAdapter.java b/spring-boot-data/src/main/java/com/baeldung/repository/FriendRepositoryAdapter.java deleted file mode 100644 index 1e4a59c4b880..000000000000 --- a/spring-boot-data/src/main/java/com/baeldung/repository/FriendRepositoryAdapter.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.baeldung.repository; - -import com.baeldung.domain.Friend; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; -import java.util.List; - -@Service -public class FriendRepositoryAdapter implements FriendRepositoryPort { - - @Resource - private FriendRepository friendRepository; - - @Override - public List list(Long id) { - return friendRepository.list(id); - } -} diff --git a/spring-boot-data/src/main/java/com/baeldung/repository/FriendRepositoryPort.java b/spring-boot-data/src/main/java/com/baeldung/repository/FriendRepositoryPort.java deleted file mode 100644 index 778f363404be..000000000000 --- a/spring-boot-data/src/main/java/com/baeldung/repository/FriendRepositoryPort.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.baeldung.repository; - -import com.baeldung.domain.Friend; - -import java.util.List; - -public interface FriendRepositoryPort { - List list(Long id); -} diff --git a/spring-boot-data/src/main/java/com/baeldung/service/FriendServiceAdapter.java b/spring-boot-data/src/main/java/com/baeldung/service/FriendServiceAdapter.java deleted file mode 100644 index 3e564de0858a..000000000000 --- a/spring-boot-data/src/main/java/com/baeldung/service/FriendServiceAdapter.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.baeldung.service; - -import com.baeldung.domain.Friend; -import com.baeldung.repository.FriendRepositoryPort; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; -import java.util.List; - -@Service -public class FriendServiceAdapter implements FriendServicePort { - - @Resource - private FriendRepositoryPort repositoryPort; - - @Override - public List list(Long id) { - return repositoryPort.list(id); - } -} diff --git a/spring-boot-data/src/main/java/com/baeldung/service/FriendServicePort.java b/spring-boot-data/src/main/java/com/baeldung/service/FriendServicePort.java deleted file mode 100644 index ee7b0054fe82..000000000000 --- a/spring-boot-data/src/main/java/com/baeldung/service/FriendServicePort.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.baeldung.service; - -import com.baeldung.domain.Friend; - -import java.util.List; - -public interface FriendServicePort { - List list(Long id); -} From c99b66ffc66a12c5ea59873968d651301650eb28 Mon Sep 17 00:00:00 2001 From: yandajun Date: Mon, 26 Aug 2019 18:40:26 +0800 Subject: [PATCH 3/4] hexagonal architecture --- .../java/com/baeldung/FriendController.java | 20 ++++++++ .../baeldung/adapters/FriendDAOAdapter.java | 16 ++++++ .../baeldung/adapters/FriendUIAdapter.java | 21 ++++++++ .../main/java/com/baeldung/domain/Friend.java | 49 +++++++++++++++++++ .../com/baeldung/ports/FriendDAOPort.java | 9 ++++ .../java/com/baeldung/ports/FriendUIPort.java | 10 ++++ .../com/baeldung/service/FriendService.java | 25 ++++++++++ 7 files changed, 150 insertions(+) create mode 100644 spring-boot-data/src/main/java/com/baeldung/FriendController.java create mode 100644 spring-boot-data/src/main/java/com/baeldung/adapters/FriendDAOAdapter.java create mode 100644 spring-boot-data/src/main/java/com/baeldung/adapters/FriendUIAdapter.java create mode 100644 spring-boot-data/src/main/java/com/baeldung/domain/Friend.java create mode 100644 spring-boot-data/src/main/java/com/baeldung/ports/FriendDAOPort.java create mode 100644 spring-boot-data/src/main/java/com/baeldung/ports/FriendUIPort.java create mode 100644 spring-boot-data/src/main/java/com/baeldung/service/FriendService.java diff --git a/spring-boot-data/src/main/java/com/baeldung/FriendController.java b/spring-boot-data/src/main/java/com/baeldung/FriendController.java new file mode 100644 index 000000000000..097a9f663e59 --- /dev/null +++ b/spring-boot-data/src/main/java/com/baeldung/FriendController.java @@ -0,0 +1,20 @@ +package com.baeldung; + +import com.baeldung.ports.FriendUIPort; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +@RestController +@RequestMapping("/friend") +public class FriendController { + @Resource + private FriendUIPort friendUIPort; + + @GetMapping("/list") + public Object friends() { + return friendUIPort.getFriends(1L); + } +} diff --git a/spring-boot-data/src/main/java/com/baeldung/adapters/FriendDAOAdapter.java b/spring-boot-data/src/main/java/com/baeldung/adapters/FriendDAOAdapter.java new file mode 100644 index 000000000000..c5683b9de148 --- /dev/null +++ b/spring-boot-data/src/main/java/com/baeldung/adapters/FriendDAOAdapter.java @@ -0,0 +1,16 @@ +package com.baeldung.adapters; + +import com.baeldung.domain.Friend; +import com.baeldung.ports.FriendDAOPort; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class FriendDAOAdapter implements FriendDAOPort { + @Override + public List list(Long id) { + // Call external component to query friends data and convert the entities to friends domain + return null; + } +} diff --git a/spring-boot-data/src/main/java/com/baeldung/adapters/FriendUIAdapter.java b/spring-boot-data/src/main/java/com/baeldung/adapters/FriendUIAdapter.java new file mode 100644 index 000000000000..360434035c2d --- /dev/null +++ b/spring-boot-data/src/main/java/com/baeldung/adapters/FriendUIAdapter.java @@ -0,0 +1,21 @@ +package com.baeldung.adapters; + +import com.baeldung.domain.Friend; +import com.baeldung.ports.FriendUIPort; +import com.baeldung.service.FriendService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + +@Service +public class FriendUIAdapter implements FriendUIPort { + @Resource + private FriendService friendService; + + @Override + public Map> getFriends(Long id) { + return friendService.friends(id); + } +} diff --git a/spring-boot-data/src/main/java/com/baeldung/domain/Friend.java b/spring-boot-data/src/main/java/com/baeldung/domain/Friend.java new file mode 100644 index 000000000000..c86d5e70ee3d --- /dev/null +++ b/spring-boot-data/src/main/java/com/baeldung/domain/Friend.java @@ -0,0 +1,49 @@ +package com.baeldung.domain; + +public class Friend { + private Long id; + private String name; + private Integer age; + private Long updateTime; + private String group; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Integer getAge() { + return age; + } + + public void setAge(Integer age) { + this.age = age; + } + + public Long getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Long updateTime) { + this.updateTime = updateTime; + } + + public String getGroup() { + return group; + } + + public void setGroup(String group) { + this.group = group; + } +} diff --git a/spring-boot-data/src/main/java/com/baeldung/ports/FriendDAOPort.java b/spring-boot-data/src/main/java/com/baeldung/ports/FriendDAOPort.java new file mode 100644 index 000000000000..2d07de35b7ac --- /dev/null +++ b/spring-boot-data/src/main/java/com/baeldung/ports/FriendDAOPort.java @@ -0,0 +1,9 @@ +package com.baeldung.ports; + +import com.baeldung.domain.Friend; + +import java.util.List; + +public interface FriendDAOPort { + List list(Long id); +} diff --git a/spring-boot-data/src/main/java/com/baeldung/ports/FriendUIPort.java b/spring-boot-data/src/main/java/com/baeldung/ports/FriendUIPort.java new file mode 100644 index 000000000000..899b022d2bdb --- /dev/null +++ b/spring-boot-data/src/main/java/com/baeldung/ports/FriendUIPort.java @@ -0,0 +1,10 @@ +package com.baeldung.ports; + +import com.baeldung.domain.Friend; + +import java.util.List; +import java.util.Map; + +public interface FriendUIPort { + Map> getFriends(Long id); +} diff --git a/spring-boot-data/src/main/java/com/baeldung/service/FriendService.java b/spring-boot-data/src/main/java/com/baeldung/service/FriendService.java new file mode 100644 index 000000000000..333355db31dc --- /dev/null +++ b/spring-boot-data/src/main/java/com/baeldung/service/FriendService.java @@ -0,0 +1,25 @@ +package com.baeldung.service; + +import com.baeldung.domain.Friend; +import com.baeldung.ports.FriendDAOPort; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + +import static java.util.Comparator.comparingLong; +import static java.util.stream.Collectors.groupingBy; + +@Service +public class FriendService { + @Resource + private FriendDAOPort friendDAOPort; + + public Map> friends(Long id) { + List friends = friendDAOPort.list(id); + return friends.stream() + .sorted(comparingLong(Friend::getUpdateTime).reversed()) + .collect(groupingBy(Friend::getGroup)); + } +} From 1d334f3249d1a2e101a6084bffae86e2dc4cc11c Mon Sep 17 00:00:00 2001 From: yandajun Date: Mon, 26 Aug 2019 18:50:26 +0800 Subject: [PATCH 4/4] delete FriendController --- .../java/com/baeldung/FriendController.java | 20 ------------------- 1 file changed, 20 deletions(-) delete mode 100644 spring-boot-data/src/main/java/com/baeldung/FriendController.java diff --git a/spring-boot-data/src/main/java/com/baeldung/FriendController.java b/spring-boot-data/src/main/java/com/baeldung/FriendController.java deleted file mode 100644 index 097a9f663e59..000000000000 --- a/spring-boot-data/src/main/java/com/baeldung/FriendController.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.baeldung; - -import com.baeldung.ports.FriendUIPort; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import javax.annotation.Resource; - -@RestController -@RequestMapping("/friend") -public class FriendController { - @Resource - private FriendUIPort friendUIPort; - - @GetMapping("/list") - public Object friends() { - return friendUIPort.getFriends(1L); - } -}