수색…


소개

SOLID 란 무엇입니까?

SOLID는 니모닉 (기억 보조) 약자입니다. 솔리드 원칙은 소프트웨어 개발자가 "코드 냄새"를 피하도록 도와야하며 좋은 소스 코드로 이어져야합니다. 좋은 소스 코드는이 문맥에서 소스 코드가 쉽게 확장되고 유지된다는 것을 의미합니다. 솔리드 원리의 주요 초점은 수업입니다

뭘 기대 할까:

왜 SOLID를 적용해야합니까?

5 가지 SOLID 원칙 적용 방법 (예)

SRP - 단일 책임 원칙

SOLID의 S는 SRP (Single responsibility principle)를 나타냅니다.

책임 이란이 문맥에서 변경해야하는 이유를 의미하기 때문에 클래스는 변경해야 할 한 가지 이유 만 있어야한다고 규정하고 있습니다.

Robert C. Martin은 2014 년 9 월 10 일에 Yale 경영진 강연에서 다음과 같이 말했습니다

같은 클래스에서 여러 가지 이유로 변경되는 함수를 넣지 마십시오.

또는

수업 시간에 문제를 섞지 마십시오.

SRP를 적용하는 이유 :

클래스를 변경하면 해당 클래스의 다른 책임과 관련된 기능에 영향을 미칠 수 있습니다. 책임을 낮은 수준으로 유지하면 부작용의 위험을 최소화합니다.

나쁜 예

인터페이스 IWallet과 IWallet을 구현하는 Wallet 클래스가 있습니다. 지갑은 우리 돈과 브랜드를 보유하고 있으며, 문자열 표현으로 돈을 인쇄해야합니다. 이 클래스는

  1. 웹 서비스
  2. 유로화로 돈을 텍스트 파일에 인쇄하는 텍스트 작성자.

나쁜 예

SRP는 여기에 두 가지 우려가 있기 때문에 위반되었습니다.

  1. 돈과 브랜드의 저장
  2. 돈의 표상.

C # 예제 코드

public interface IWallet
{
    void setBrand(string brand);
    string getBrand();
    void setMoney(decimal money);
    decimal getMoney();
    string printMoney();
}

public class Wallet : IWallet
{
    private decimal m_Money;
    private string m_Brand;

    public string getBrand()
    {
        return m_Brand;
    }

    public decimal getMoney()
    {
        return m_Money;
    }

    public void setBrand(string brand)
    {
        m_Brand = brand;
    }

    public void setMoney(decimal money)
    {
        m_Money = money;
    }

    public string printMoney()
    {
        return m_Money.ToString();
    }
}

좋은 예

좋은 예

SRP 위반을 방지하기 위해 printMoney 메소드를 Wallet 클래스에서 제거하고이를 Printer 클래스에 배치했습니다. 이제 Printer 클래스가 인쇄 작업을 담당하고 Wallet이 값 저장을 담당합니다.

C # 예제 코드

public interface IPrinter
{
    void printMoney(decimal money);
}

public class EuroPrinter : IPrinter
{
    public void printMoney(decimal money)
    {
        //print euro
    }
}

public class DollarPrinter : IPrinter
{
    public void printMoney(decimal money)
    {
        //print Dollar
    }
}

public interface IWallet
{
    void setBrand(string brand);
    string getBrand();
    void setMoney(decimal money);
    decimal getMoney();
}

public class Wallet : IWallet
{
    private decimal m_Money;
    private string m_Brand;

    public string getBrand()
    {
        return m_Brand;
    }

    public decimal getMoney()
    {
        return m_Money;
    }

    public void setBrand(string brand)
    {
        m_Brand = brand;
    }

    public void setMoney(decimal money)
    {
        m_Money = money;
    }
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow