솔리드 - 딥
Módulos de alto nível não devem depender de módulos de baixo nível. Ambos devem depender de abstrações; Abstrações não devem depender de detalhes. Detalhes devem depender de abstrações.
Dependa de uma abstração e não de uma implementação.
예를 들면:
Petshop 클래스는 PetRepositorioMySQL 생성자 및 CadastrarOuAtualizarPet() 메서드를 생성할 수 없으며 애완 동물 정보가 존재하는지 확인할 수 있는지 확인할 수 없습니다.
public class Petshop
{
private readonly PetRepositorioMySQL _petRepositorioMySQL;
public Petshop()
{
_petRepositorioMySQL = new PetRepositorioMySQL();
}
public void _CadastrarOuAtualizarPet(string nome)
{
var pet = _petRepositorioMySQL.Get(nome);
if (pet == null)
_petRepositorioMySQL.Insert(pet);
else
_petRepositorioMySQL.Update(pet);
}
}
문제는 PetRepositorioSQLServer가 PetRepositorioMySQL을 사용하지 않고 문제를 해결하는 데 문제가 있으며, Petshop은 어떤 방식으로든 사용할 수 있습니다. Nossa classe não deveria ter que saber como se instancia este repositório ou como que ele se comporta internamente. Só precisamos saber o que ele recebe eo que retorna.
Devido a isso, estamos quebrando o princípio da inversão de dependsência.
해결책:
Criamos 인터페이스 IRepositorioGenerico e fazemos com que nossa classe PetRepositorioMySQL implementa-a.
public class PetRepositorioMySQL : IRepositorioGenerico
{
public Pet Get(string nome)
{
throw new NotImplementedException();
}
public void Insert(Pet pet)
{
throw new NotImplementedException();
}
public void Update(Pet pet)
{
throw new NotImplementedException();
}
}
Petshop 클래스는 PetRepositorioMySQL 클래스가 아니라 IRepositorioGenerico 인터페이스를 나타냅니다.
public class Petshop
{
private readonly IRepositorioGenerico _repositorio;
public Petshop(IRepositorioGenerico repositorio)
{
_repositorio = repositorio;
}
public void _CadastrarOuAtualizarPet(string nome)
{
var pet = _repositorio.Get(nome);
if (pet == null)
_repositorio.Insert(pet);
else
_repositorio.Update(pet);
}
}
애완 동물 가게를 인스턴스 또는 리포지토리로 가져오지 말고 소비자가 클래스를 생성하도록 허용하지 않도록 인스턴스를 생성하지 마십시오. 예를 들어, 저장소의 정확한 위치에 따라 PetShop 클래스의 정확한 위치를 변경하지 않고 새로운 저장소에서 mesma 인터페이스를 구현합니다. Desta forma, invertemos o controle.
Reference
이 문제에 관하여(솔리드 - 딥), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/gbarbosa/solid-dip-1138텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)