diff --git a/ddd-modules/hexagonalarchitecture/README.md b/ddd-modules/hexagonalarchitecture/README.md
new file mode 100644
index 0000000000..74f2b39a92
--- /dev/null
+++ b/ddd-modules/hexagonalarchitecture/README.md
@@ -0,0 +1,3 @@
+This module contains articles about hexagonal architecture in java
+
+### Relevant articles
\ No newline at end of file
diff --git a/ddd-modules/hexagonalarchitecture/pom.xml b/ddd-modules/hexagonalarchitecture/pom.xml
new file mode 100644
index 0000000000..6036c37cc0
--- /dev/null
+++ b/ddd-modules/hexagonalarchitecture/pom.xml
@@ -0,0 +1,35 @@
+
+
+ 4.0.0
+
+ ddd-modules
+ com.baeldung.dddmodules
+ 1.0
+
+
+ com.baeldung.dddmodules.hexagonalarchitecture
+ hexagonalarchitecture
+ 1.0
+ jar
+
+ hexagonalarchitecture
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ ${maven.compiler.source}
+ ${maven.compiler.target}
+
+
+
+
+
+
+ UTF-8
+ 1.8
+ 1.8
+
+
diff --git a/ddd-modules/hexagonalarchitecture/src/main/java/com/baeldung/dddmodules/hexagonalarchitecture/adapters/InMemoryUserPersistenceImpl.java b/ddd-modules/hexagonalarchitecture/src/main/java/com/baeldung/dddmodules/hexagonalarchitecture/adapters/InMemoryUserPersistenceImpl.java
new file mode 100644
index 0000000000..e94dedb7a0
--- /dev/null
+++ b/ddd-modules/hexagonalarchitecture/src/main/java/com/baeldung/dddmodules/hexagonalarchitecture/adapters/InMemoryUserPersistenceImpl.java
@@ -0,0 +1,14 @@
+package com.baeldung.dddmodules.hexagonalarchitecture.adapters;
+
+import com.baeldung.dddmodules.hexagonalarchitecture.ports.UserPersistence;
+import com.baeldung.dddmodules.hexagonalarchitecture.core.User;
+
+import java.util.UUID;
+
+class InMemoryUserPersistenceImpl implements UserPersistence {
+ @Override
+ public User createUser(User user) {
+ user.setId(UUID.randomUUID());
+ return user;
+ }
+}
diff --git a/ddd-modules/hexagonalarchitecture/src/main/java/com/baeldung/dddmodules/hexagonalarchitecture/adapters/Main.java b/ddd-modules/hexagonalarchitecture/src/main/java/com/baeldung/dddmodules/hexagonalarchitecture/adapters/Main.java
new file mode 100644
index 0000000000..39ee42fd8c
--- /dev/null
+++ b/ddd-modules/hexagonalarchitecture/src/main/java/com/baeldung/dddmodules/hexagonalarchitecture/adapters/Main.java
@@ -0,0 +1,13 @@
+package com.baeldung.dddmodules.hexagonalarchitecture.adapters;
+
+import com.baeldung.dddmodules.hexagonalarchitecture.core.User;
+import com.baeldung.dddmodules.hexagonalarchitecture.core.UserServiceImpl;
+import com.baeldung.dddmodules.hexagonalarchitecture.ports.UserService;
+
+public class Main {
+
+ public static void main(String[] args) {
+ UserService userService = new UserServiceImpl(new InMemoryUserPersistenceImpl());
+ User user = userService.createUser(new User("John", "Doe"));
+ }
+}
diff --git a/ddd-modules/hexagonalarchitecture/src/main/java/com/baeldung/dddmodules/hexagonalarchitecture/core/User.java b/ddd-modules/hexagonalarchitecture/src/main/java/com/baeldung/dddmodules/hexagonalarchitecture/core/User.java
new file mode 100644
index 0000000000..7454538254
--- /dev/null
+++ b/ddd-modules/hexagonalarchitecture/src/main/java/com/baeldung/dddmodules/hexagonalarchitecture/core/User.java
@@ -0,0 +1,43 @@
+package com.baeldung.dddmodules.hexagonalarchitecture.core;
+
+import java.util.UUID;
+
+public class User {
+ private UUID id;
+ private String firstName;
+ private String lastName;
+
+ public User(String firstName, String lastName) {
+ this.firstName = firstName;
+ this.lastName = lastName;
+ }
+
+ public UUID getId() {
+ return id;
+ }
+
+ public void setId(UUID id) {
+ this.id = id;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ @Override
+ public String toString() {
+ return "User{" + "id=" + id + ", firstName='" + firstName + '\'' + ", lastName='" + lastName + '\'' + '}';
+ }
+}
diff --git a/ddd-modules/hexagonalarchitecture/src/main/java/com/baeldung/dddmodules/hexagonalarchitecture/core/UserServiceImpl.java b/ddd-modules/hexagonalarchitecture/src/main/java/com/baeldung/dddmodules/hexagonalarchitecture/core/UserServiceImpl.java
new file mode 100644
index 0000000000..5209a7c6b6
--- /dev/null
+++ b/ddd-modules/hexagonalarchitecture/src/main/java/com/baeldung/dddmodules/hexagonalarchitecture/core/UserServiceImpl.java
@@ -0,0 +1,17 @@
+package com.baeldung.dddmodules.hexagonalarchitecture.core;
+
+import com.baeldung.dddmodules.hexagonalarchitecture.ports.UserPersistence;
+import com.baeldung.dddmodules.hexagonalarchitecture.ports.UserService;
+
+public class UserServiceImpl implements UserService {
+ private UserPersistence userPersistence;
+
+ public UserServiceImpl(UserPersistence userPersistence) {
+ this.userPersistence = userPersistence;
+ }
+
+ @Override
+ public User createUser(User userToCreate) {
+ return userPersistence.createUser(userToCreate);
+ }
+}
diff --git a/ddd-modules/hexagonalarchitecture/src/main/java/com/baeldung/dddmodules/hexagonalarchitecture/ports/UserPersistence.java b/ddd-modules/hexagonalarchitecture/src/main/java/com/baeldung/dddmodules/hexagonalarchitecture/ports/UserPersistence.java
new file mode 100644
index 0000000000..7d37b46b59
--- /dev/null
+++ b/ddd-modules/hexagonalarchitecture/src/main/java/com/baeldung/dddmodules/hexagonalarchitecture/ports/UserPersistence.java
@@ -0,0 +1,7 @@
+package com.baeldung.dddmodules.hexagonalarchitecture.ports;
+
+import com.baeldung.dddmodules.hexagonalarchitecture.core.User;
+
+public interface UserPersistence {
+ User createUser(User user);
+}
diff --git a/ddd-modules/hexagonalarchitecture/src/main/java/com/baeldung/dddmodules/hexagonalarchitecture/ports/UserService.java b/ddd-modules/hexagonalarchitecture/src/main/java/com/baeldung/dddmodules/hexagonalarchitecture/ports/UserService.java
new file mode 100644
index 0000000000..3b99e7b45a
--- /dev/null
+++ b/ddd-modules/hexagonalarchitecture/src/main/java/com/baeldung/dddmodules/hexagonalarchitecture/ports/UserService.java
@@ -0,0 +1,7 @@
+package com.baeldung.dddmodules.hexagonalarchitecture.ports;
+
+import com.baeldung.dddmodules.hexagonalarchitecture.core.User;
+
+public interface UserService {
+ User createUser(User userToCreate);
+}
diff --git a/ddd-modules/pom.xml b/ddd-modules/pom.xml
index 6ab1829198..18d2e1d7c7 100644
--- a/ddd-modules/pom.xml
+++ b/ddd-modules/pom.xml
@@ -1,8 +1,5 @@
-
-
+
+
4.0.0
com.baeldung.dddmodules
ddd-modules
@@ -23,7 +20,8 @@
shippingcontext
ordercontext
mainapp
-
+ hexagonalarchitecure
+