Static factory method vs adapter
up vote
-3
down vote
favorite
I have a problem which approach is best. Please imagine system written in a hexagonal architecture where each service method accepts class or classes. Let say for example my method create User.
1. Approach:
Of course, it is the only example and real classes can be more complex to accept more arguments etc.
I have a class like this:
class CreateUserCommand {
private final String name;
private final String username;
// let say 10 other fields emails etc it doesnt matter
private CreateUserCommand(String name, String username) {
this.name = name;
this.username = username;
}
public static CreateUserCommand createFromApi(CreateUserRequestApi createUserRequestApi) {
return new CreateUserCommand(createUserRequestApi.getName(), createUserRequestApi.getUsername());
}
public static CreateUserCommand createFromRabbit(CreateUserRabbitMessage createUserRabbitMessage) {
return new CreateUserCommand(createUserRabbitMessage.getName(), createUserRabbitMessage.getUsername());
}
}
- Approach:
interface CreateUserCommand {
public String getName();
public String getUsername();
//other 10 methods like getters
}
And for each entry point to my system (api, rabbitmq etc) I will create adapters for this interface so in my service I will operate on the interface instead of real implementation of a class as I do in the first example. What approach do you thinks is better and why?
java object-oriented design-patterns
add a comment |
up vote
-3
down vote
favorite
I have a problem which approach is best. Please imagine system written in a hexagonal architecture where each service method accepts class or classes. Let say for example my method create User.
1. Approach:
Of course, it is the only example and real classes can be more complex to accept more arguments etc.
I have a class like this:
class CreateUserCommand {
private final String name;
private final String username;
// let say 10 other fields emails etc it doesnt matter
private CreateUserCommand(String name, String username) {
this.name = name;
this.username = username;
}
public static CreateUserCommand createFromApi(CreateUserRequestApi createUserRequestApi) {
return new CreateUserCommand(createUserRequestApi.getName(), createUserRequestApi.getUsername());
}
public static CreateUserCommand createFromRabbit(CreateUserRabbitMessage createUserRabbitMessage) {
return new CreateUserCommand(createUserRabbitMessage.getName(), createUserRabbitMessage.getUsername());
}
}
- Approach:
interface CreateUserCommand {
public String getName();
public String getUsername();
//other 10 methods like getters
}
And for each entry point to my system (api, rabbitmq etc) I will create adapters for this interface so in my service I will operate on the interface instead of real implementation of a class as I do in the first example. What approach do you thinks is better and why?
java object-oriented design-patterns
1
This is not the site to ask general design advice. We require concrete code from a project. As such your current question is off-topic as it consists of hypothetical code. If you can update the question with your actual code then you can still include your concerns. Please see the help center for more information.
– bruglesco
15 hours ago
add a comment |
up vote
-3
down vote
favorite
up vote
-3
down vote
favorite
I have a problem which approach is best. Please imagine system written in a hexagonal architecture where each service method accepts class or classes. Let say for example my method create User.
1. Approach:
Of course, it is the only example and real classes can be more complex to accept more arguments etc.
I have a class like this:
class CreateUserCommand {
private final String name;
private final String username;
// let say 10 other fields emails etc it doesnt matter
private CreateUserCommand(String name, String username) {
this.name = name;
this.username = username;
}
public static CreateUserCommand createFromApi(CreateUserRequestApi createUserRequestApi) {
return new CreateUserCommand(createUserRequestApi.getName(), createUserRequestApi.getUsername());
}
public static CreateUserCommand createFromRabbit(CreateUserRabbitMessage createUserRabbitMessage) {
return new CreateUserCommand(createUserRabbitMessage.getName(), createUserRabbitMessage.getUsername());
}
}
- Approach:
interface CreateUserCommand {
public String getName();
public String getUsername();
//other 10 methods like getters
}
And for each entry point to my system (api, rabbitmq etc) I will create adapters for this interface so in my service I will operate on the interface instead of real implementation of a class as I do in the first example. What approach do you thinks is better and why?
java object-oriented design-patterns
I have a problem which approach is best. Please imagine system written in a hexagonal architecture where each service method accepts class or classes. Let say for example my method create User.
1. Approach:
Of course, it is the only example and real classes can be more complex to accept more arguments etc.
I have a class like this:
class CreateUserCommand {
private final String name;
private final String username;
// let say 10 other fields emails etc it doesnt matter
private CreateUserCommand(String name, String username) {
this.name = name;
this.username = username;
}
public static CreateUserCommand createFromApi(CreateUserRequestApi createUserRequestApi) {
return new CreateUserCommand(createUserRequestApi.getName(), createUserRequestApi.getUsername());
}
public static CreateUserCommand createFromRabbit(CreateUserRabbitMessage createUserRabbitMessage) {
return new CreateUserCommand(createUserRabbitMessage.getName(), createUserRabbitMessage.getUsername());
}
}
- Approach:
interface CreateUserCommand {
public String getName();
public String getUsername();
//other 10 methods like getters
}
And for each entry point to my system (api, rabbitmq etc) I will create adapters for this interface so in my service I will operate on the interface instead of real implementation of a class as I do in the first example. What approach do you thinks is better and why?
java object-oriented design-patterns
java object-oriented design-patterns
asked 15 hours ago
Pulkownik
10629
10629
1
This is not the site to ask general design advice. We require concrete code from a project. As such your current question is off-topic as it consists of hypothetical code. If you can update the question with your actual code then you can still include your concerns. Please see the help center for more information.
– bruglesco
15 hours ago
add a comment |
1
This is not the site to ask general design advice. We require concrete code from a project. As such your current question is off-topic as it consists of hypothetical code. If you can update the question with your actual code then you can still include your concerns. Please see the help center for more information.
– bruglesco
15 hours ago
1
1
This is not the site to ask general design advice. We require concrete code from a project. As such your current question is off-topic as it consists of hypothetical code. If you can update the question with your actual code then you can still include your concerns. Please see the help center for more information.
– bruglesco
15 hours ago
This is not the site to ask general design advice. We require concrete code from a project. As such your current question is off-topic as it consists of hypothetical code. If you can update the question with your actual code then you can still include your concerns. Please see the help center for more information.
– bruglesco
15 hours ago
add a comment |
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Code Review Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f209269%2fstatic-factory-method-vs-adapter%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
This is not the site to ask general design advice. We require concrete code from a project. As such your current question is off-topic as it consists of hypothetical code. If you can update the question with your actual code then you can still include your concerns. Please see the help center for more information.
– bruglesco
15 hours ago