Daacoplando Aカンガルーデドムは、ニオデUa Aplica
14099 ワード
フェラチオナス Java SDK Docker Postman IDEデスー TOS Essenciais de a e e mter o dom dom no da aplicaの遺言o(cora discrito o da plica des so o,entidades e regras de neg,ccide de uma aplica).ドスポンポン
Estou Estudando E adquirindo Conhecimento Nesse Assunto de Designer e Econutura de C . Dio Mas neste Artigo Quero Division . o Pocco que tenho aprendido sobre o assunto
Vamos Criar Numa Aplicaは、パラディノス・ノスソス・ド・フォン・ニオ・アイソド、E iRemos - Inventar - no - inicio O Banco de Dados postgres comoデータベースda nossa - aplicaの結果を得ます.
パラインシアーモ・クリ・セウSpring Initializr コンフォルム・イメージャー
Vamos Construir nossa aplicaは、oを使用します.
コア:ESSEパッケージe onde ficara o coraは、o o a da nossa aplicaは、o o o o、oを見つけます.
インフラストラクチャー:ESSEパッケージe onde ficaraは、pardeデConfiguraの上で、nonosa aplicaを得ますo o、Conancuraは、dados eを元にします.
アプリケーション:ESSEパッケージe onde ficaraは、pardeデacessoをnossa aplicaを得ますo o por aplicaは、外見をします.
Imagem abaixoをconformeします.
Dentro DoパッケージコアCrie
PardeデConfiguraは、o o o o o sosres arszenaremos dentroにnosso arquivoアプリケーションを禁止します.プロパティ.
vamosアゴラEstruturar o acessoは、nossa aplicaを与えます
パッケージコントローラのパッケージ
na segunda parte deste post vamos fazer a transi pose o o da nossa aplica displo o o do postgres paro o Dynamodb,para acessar e so clclar no link abaixo
Estou Estudando E adquirindo Conhecimento Nesse Assunto de Designer e Econutura de C . Dio Mas neste Artigo Quero Division . o Pocco que tenho aprendido sobre o assunto
Vamos Criar Numa Aplicaは、パラディノス・ノスソス・ド・フォン・ニオ・アイソド、E iRemos - Inventar - no - inicio O Banco de Dados postgres comoデータベースda nossa - aplicaの結果を得ます.
パラインシアーモ・クリ・セウSpring Initializr コンフォルム・イメージャー

Vamos Construir nossa aplicaは、oを使用します.
コア:ESSEパッケージe onde ficara o coraは、o o a da nossa aplicaは、o o o o、oを見つけます.
インフラストラクチャー:ESSEパッケージe onde ficaraは、pardeデConfiguraの上で、nonosa aplicaを得ますo o、Conancuraは、dados eを元にします.
アプリケーション:ESSEパッケージe onde ficaraは、pardeデacessoをnossa aplicaを得ますo o por aplicaは、外見をします.
Imagem abaixoをconformeします.

Dentro DoパッケージコアCrie
usuario
, Ne - e - Subario de Nossa Aplicaの論文についてUsuario
- NSSA CLASSE実体import javax.persistence.*;
@Entity
public class Usuario {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long userId;
private String name;
private String email;
private String cpf;
@Deprecated
public Usuario() {
}
public Usuario(String name, String email, String cpf) {
this.name = name;
this.email = email;
this.cpf = cpf;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getName() {
return name;
}
public String getEmail() {
return email;
}
public String getCpf() {
return cpf;
}
public void setName(String name) {
this.name = name;
}
public void setEmail(String email) {
this.email = email;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
}
UsuarioRepository
- UMAインターフェイスのCOMのOSは、oのようなtodosデacesso ao bancoデdados relacionado a um usuのreo.import java.util.List;
import java.util.Optional;
public interface UsuarioRepository {
public Usuario createUser(Usuario user);
public Usuario updateUser(Usuario user);
public Optional<Usuario> findByUserId(Long userId);
public List<Usuario> findAllUser();
public void deleteUser(Usuario user);
}
UsuarioService
- UMAインタフェースのCOMのOSは、使用してください.import com.example.ddd.application.inputDto.user.UsuarioForm;
import com.example.ddd.application.outputDto.user.UsuarioDto;
import java.util.List;
public interface UsuarioService {
public Usuario createUser(Usuario usuario);
public String updateUser(UsuarioForm usuarioForm, Long userId);
public List<UsuarioDto> findAllUser();
public UsuarioDto findByUserId(Long usuarioId);
public void deleteUser(Long usuarioId);
}
UsuarioServiceImpl
- NESTA CLASSE実装OS OS Metodos Contidos NAインタフェースUsuarioService
E Realizamosは、Logica必需品パラシュートで降下しているe Expor Os Dadosパラシュートで降下します.import com.example.ddd.application.inputDto.user.UsuarioForm;
import com.example.ddd.application.outputDto.user.UsuarioDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class UsuarioServiceImpl implements UsuarioService {
@Autowired
private UsuarioRepository usuarioRepository;
public UsuarioServiceImpl(UsuarioRepository usuarioRepository) {
this.usuarioRepository = usuarioRepository;
}
@Override
public Usuario createUser(Usuario usuario) {
return usuarioRepository.createUser(usuario);
}
@Override
public String updateUser(UsuarioForm usuarioForm, Long userId) {
Usuario usuario = usuarioRepository.findByUserId(userId)
.orElseThrow(() -> new IllegalArgumentException("Nao ha usuario com o id: " + userId.toString()));
Usuario usuarioUpdate = usuarioForm.converte();
usuarioUpdate.setUserId(usuario.getUserId());
usuarioRepository.updateUser(usuarioUpdate);
return "atualizado";
}
@Override
public List<UsuarioDto> findAllUser() {
return usuarioRepository.findAllUser().stream().map(it -> {
return new UsuarioDto(it.getUserId(), it.getName(), it.getEmail(), it.getCpf());
}).collect(Collectors.toList());
}
@Override
public UsuarioDto findByUserId(Long usuarioId) {
Usuario usuario = usuarioRepository.findByUserId(usuarioId)
.orElseThrow(() -> new IllegalArgumentException("Nao ha usuario cadastrado com o id: " + usuarioId.toString()));
return new UsuarioDto(usuario.getUserId(), usuario.getName(), usuario.getEmail(), usuario.getCpf());
}
@Override
public void deleteUser(Long usuarioId) {
Usuario usuario = usuarioRepository.findByUserId(usuarioId)
.orElseThrow(() -> new IllegalArgumentException("Nao ha usuario cadastrado com o id: " + usuarioId.toString()));
usuarioRepository.deleteUser(usuario);
}
}
アイソヴァソアゴラデロンドゥパッケージinfrastructure
クラスとしてのCriarとしてのCriarPardeデConfiguraは、o o o o o sosres arszenaremos dentroにnosso arquivoアプリケーションを禁止します.プロパティ.
Application.properties
# datasource
spring.datasource.driverClassName=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:5432/testearq
spring.datasource.username=postgres
spring.datasource.password=password
# jpa
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto=update
# Mostrar Sql no terminal
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
server.error.include-message=always
Vamos Criarアゴラdentroなしパッケージinfrastructure
デリポジトリe dentro desseパッケージumパッケージsuuariorepository que IRA armazenarは、クラスとして呼吸します.UsuarioAbstractRepositoryDB
- インターフェースque nos permite v v rios m To dos Dreamionados ao Banco de dados atrav es s jpaimport com.example.ddd.core.usuario.Usuario;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface UsuarioAbstractRepositoryDB extends JpaRepository<Usuario, Long> {
}
UsuarioRepositoryImpl
- ESTA CLASSE Implementos OS M To Dos Criamos NAインタフェースUsuarioRepository
E TEMインフェネダUsuarioAbstractRepositoryDB
, <武井>UsuarioRepository
<研究ノート>トードー・デ・acesso Ao Banco de Dados que Obtemos - atrav - es da Ine Present - O da ClassseUsuarioAbstractRepositoryDB
.
import com.example.ddd.core.usuario.Usuario;
import com.example.ddd.core.usuario.UsuarioRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Optional;
@Component
public class UsuarioRepositoryImpl implements UsuarioRepository {
@Autowired
private UsuarioAbstractRepositoryDB usuarioAbstractRepositoryDB;
public UsuarioRepositoryImpl(UsuarioAbstractRepositoryDB usuarioAbstractRepositoryDB) {
this.usuarioAbstractRepositoryDB = usuarioAbstractRepositoryDB;
}
@Override
public Usuario createUser(Usuario user) {
return usuarioAbstractRepositoryDB.save(user);
}
@Override
public Usuario updateUser(Usuario user) {
return usuarioAbstractRepositoryDB.save(user);
}
@Override
public Optional<Usuario> findByUserId(Long userId) {
return usuarioAbstractRepositoryDB.findById(userId);
}
@Override
public List<Usuario> findAllUser() {
return usuarioAbstractRepositoryDB.findAll();
}
@Override
public void deleteUser(Usuario user) {
usuarioAbstractRepositoryDB.delete(user);
}
}
E Aqui que Desacoplamos nossoドムは、BancoデDados、Pois IndaddenteにBanco De Dados que Abstrzarmos TemosをしますUsuarioRepository
第二次大戦後の日系企業に対する影響vamosアゴラEstruturar o acessoは、nossa aplicaを与えます
controllers
, inputDto
, outputDto
.パッケージコントローラのパッケージ
usuarioController
E DENRON DEA A CLASSE UsuarioController que ter is s m m a todos de acesso NSSA APLICAは、HTTPを通してoを使います.UsuarioController
import com.example.ddd.application.inputDto.user.UsuarioForm;
import com.example.ddd.application.outputDto.user.UsuarioDto;
import com.example.ddd.core.usuario.Usuario;
import com.example.ddd.core.usuario.UsuarioService;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("api/v1/")
public class UsuarioController {
private UsuarioService usuarioService;
public UsuarioController(UsuarioService usuarioService) {
this.usuarioService = usuarioService;
}
@PostMapping("user")
public String createUser(@RequestBody UsuarioForm usuarioForm){
Usuario user = usuarioForm.converte();
System.out.println(user.toString());
usuarioService.createUser(user);
return "ok";
}
@GetMapping("user")
public List<UsuarioDto> findAllUser(){
return usuarioService.findAllUser();
}
@PutMapping("user/{usuarioId}")
public String updateUser(@RequestBody UsuarioForm usuarioForm, @PathVariable("usuarioId") Long usuarioId){
usuarioService.updateUser(usuarioForm, usuarioId);
return "atualizado";
}
@GetMapping("user/{usuarioId}")
public UsuarioDto updateUser(@PathVariable("usuarioId") Long usuarioId){
return usuarioService.findByUserId(usuarioId);
}
@DeleteMapping("user/{usuarioId}")
public void deleteUser(@PathVariable("usuarioId") Long usuarioId){
usuarioService.deleteUser(usuarioId);
}
}
パッケージパッケージinputDto
プレミアムパッケージusuario
E Dentro dele a a a a a a a se se a susuoos o dsuarioform,que ira mapear os dados que recebemos atraves da sensi semo o HTTP e Converted ess dados para nossa classe entityUsuarioForm
import com.example.ddd.core.usuario.Usuario;
public class UsuarioForm {
private String name;
private String email;
private String cpf;
public UsuarioForm(String name, String email, String cpf) {
this.name = name;
this.email = email;
this.cpf = cpf;
}
public Usuario converte() {
return new Usuario(name,email,cpf);
}
}
パッケージパッケージoutputDto
プレミアムパッケージusuario
E Dentro dele a a a a a a a a ira ira mapear os dados que iremos retornar para nossa rensi menlo o http .UsuarioDto
public class UsuarioDto {
private Long id;
private String name;
private String email;
private String cpf;
public Long getId() {
return id;
}
public String getName() {
return name;
}
public String getEmail() {
return email;
}
public String getCpf() {
return cpf;
}
public UsuarioDto(Long id, String name, String email, String cpf) {
this.id = id;
this.name = name;
this.email = email;
this.cpf = cpf;
}
}
Vamos Agora Rodar Nossa Aplica Oprica O e e Testa la Post man , Mas Para Isso ser de necess by rio subirmos nosso banco de dados postgres , na raiz de nossa aplicaの結果docker-compose.yml
.docker-compose.yml
version: '3'
services:
postgres:
image: 'postgres:alpine'
volumes:
- postgres-volume:/var/lib/postgresql/data
ports:
- 5432:5432
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
volumes:
postgres-volume:
ペトロCMDは、naパスタondedocker-compose.yml
E・ロドo Seguinte Comandodocker compose up -d
**Usuario Cadastrado com Sucesso**


na segunda parte deste post vamos fazer a transi pose o o da nossa aplica displo o o do postgres paro o Dynamodb,para acessar e so clclar no link abaixo
Reference
この問題について(Daacoplando Aカンガルーデドムは、ニオデUa Aplica), 我々は、より多くの情報をここで見つけました https://dev.to/2020nani/desacoplando-a-camada-de-dominio-de-uma-aplicacao-das-outras-camadas-2b0bテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol