SOLID를 따르는 것이 기술 스택 위에 프레임 워크를 작성하게합니까?


70

저는 SOLID를 좋아하며 개발할 때 최선을 다하여 사용하고 적용합니다. 그러나 나는 SOLID 접근 방식이 코드를 '프레임 워크'코드로 바꾸는 것처럼 도울 수는 없지만 느낄 수는 없습니다. 즉, 다른 개발자가 사용할 프레임 워크 나 라이브러리를 만드는 경우 설계 한 코드입니다.

나는 일반적으로 요구 사항과 KISS (일반 프로그래밍)를 통해 요구되는 것을 거의 또는 덜 생성하거나 다른 개발자가 필요할 수있는 유연성을 제공하는 매우 일반적이고 재사용 가능한 논리, 서비스 등을 만드는 두 가지 프로그래밍 모드를 연습했습니다. .

사용자가 실제로 x와 y 작업을 수행하는 응용 프로그램을 원한다면 시작하기에 유효한 문제인지조차 모를 때조차도 SOLID를 따라 추상화의 전체 진입 점을 추가하는 것이 합리적입니까? 와? 이러한 추상화의 진입 점을 추가하면 사용자 요구 사항을 실제로 충족 시키거나 기존 프레임 워크 및 기술 스택 위에 프레임 워크를 만들어 향후 추가를 쉽게 할 수 있습니까? 어떤 경우에 고객 또는 개발자의 이익을 위해 봉사하고 있습니까?

이것은 Java Enterprise 세계에서 일반적으로 보이는 것인데, J2EE 또는 Spring 위에 자신의 프레임 워크를 디자인하는 것처럼 느껴지므로 사용자의 UX에 중점을 두지 않고 개발자에게 더 나은 UX가됩니까?


12
경험적으로 가장 짧은 프로그래밍 규칙의 문제점은 해석, 우연한 경우, 때로는 이러한 규칙의 단어 정의가 면밀한 검사를 통해 명확하지 않다는 것입니다. 그들은 본질적으로 다른 사람들에게 다양한 것들을 의미 할 수 있습니다. 비 이념적 인 실용주의를 갖는 것은 보통 더 현명한 결정을 내릴 수있게합니다.
마크 로저스

1
SOLID 원칙을 따르는 것처럼 들리면 막대한 투자와 많은 추가 작업이 필요합니다. 실제로는 무료가 아닙니다. 또한 코드를 쉽게 유지 관리하고 확장 할 수 있기 때문에 미래에 당신이나 다른 사람에게 큰 투자를 절약 할 수 있습니다. "우리는 숙제를해야합니까, 아니면 고객을 행복하게해야합니까?"와 같은 질문을 계속합니다. 이것들은 트레이드 오프가 아닙니다.
Martin Maat

1
@MartinMaat보다 극단적 인 형태의 SOLID가 큰 투자를 의미한다고 생각합니다. 즉. 엔터프라이즈 소프트웨어. 엔터프라이즈 소프트웨어 이외에는 ORM, 기술 스택 또는 데이터베이스를 추상화해야 할 이유가 거의 없습니다. 선택한 스택을 고수 할 가능성이 매우 높기 때문입니다. 같은 의미에서 특정 프레임 워크, 데이터베이스 또는 ORM에 연결함으로써 스택에 연결되어 있기 때문에 SOLID 원칙을 위반하게됩니다. 대부분의 작업에서 SOLID의 유연성 수준은 필요하지 않습니다.
Igneous01

1
내부 플랫폼 효과를 참조하십시오 .
Maxpm

1
대부분의 코드를 프레임 워크와 같은 것으로 바꾸는 것은 전혀 끔찍한 소리가 아닙니다. 오버 엔지니어링 된 경우에만 끔찍합니다. 그러나 프레임 워크를 최소화하고 의견을 제시 할 수 있습니다. 이것이 SOLID를 따를 때 피할 수없는 결과 인지는 확실하지 않지만 확실히 가능한 결과이며 여러분이 받아 들여야 할 것입니다.
Konrad Rudolph

답변:


84

관찰 결과는 정확하고 SOLID 원칙은 재사용 가능한 라이브러리 또는 프레임 워크 코드를 염두에두고 IMHO로 만들어졌습니다. 의미가 있는지 묻지 않고 모든 것을 맹목적으로 따라갈 때, 필요 이상으로 시스템에 과도하게 일반화하고 더 많은 노력을 기울일 위험이 있습니다.

이것은 절충이며 일반화시기와 그렇지 않은시기에 대한 올바른 결정을 내리기 위해서는 약간의 경험이 필요합니다. 이것에 대한 가능한 접근 방식은 YAGNI 원칙을 고수하는 것입니다-코드를 "경우에 따라"만들지 말거나 단어를 사용하지 마십시오.

다른 개발자 들이 필요로 하는 유연성 제공

대신, 다른 개발자 들이 필요 로하는 즉시 실제로 필요한 유연성을 제공하십시오 .

따라서 코드에 하나의 함수 또는 클래스가있을 때마다 재사용 할 수 있는지 확실하지 않으면 지금 프레임 워크에 넣지 마십시오. 재사용 할 실제 사례가있을 때까지 기다렸다가 "해당 사례에 대해 충분히 SOLID"로 리 팩터하십시오 . 실제 재사용 사례에 실제로 필요한 클래스에 더 많은 구성 기능 (OCP에 따름) 또는 추상화 시작점 (DIP 사용)을 구현하지 마십시오. 재사용에 대한 다음 요구 사항이 실제로있을 때 다음 유연성을 추가하십시오.

물론 이러한 작업 방식은 기존의 작업 코드 기반에서 항상 약간의 리팩토링이 필요합니다. 이것이 바로 자동 테스트가 중요한 이유입니다. 따라서 코드를 처음부터 단위 테스트가 가능하도록 충분히 SOLID로 만드는 것은 시간 낭비가 아니며 그렇게하는 것이 YAGNI와 모순되지 않습니다. 자동 코드 테스트는 "코드 재사용"에 유효한 경우입니다. 해당 코드는 테스트뿐만 아니라 프로덕션 코드에서도 사용되기 때문입니다. 그러나 테스트가 실제로 작동하도록하는 데 필요한 유연성을 추가하십시오.

이것은 실제로 오래된 지혜입니다. 우리가 쓰는하기 전에 오래 전 용어가 SOLID 인기 도착하기 전에, 누군가가 나에게 다시 , 우리가 작성해야 가능 코드를 사용할 수있는 코드를. 그리고 나는 이것이 좋은 추천이라고 생각합니다.


23
추가 경합 : 재사용을 위해 코드를 리팩토링하기 전에 동일한 논리가 표시되는 3 가지 사용 사례가있을 때까지 기다리십시오. 2 개 조각으로 리팩토링을 시작하면 요구 사항 변경 또는 새로운 사용 사례로 인해 추상화가 어려워지는 상황이 발생하기 쉽습니다. 또한 리 팩터는 동일한 유스 케이스를 가진 것들로 제한하십시오 : 2 개의 구성 요소는 동일한 코드를 가질 수 있지만 완전히 다른 일을 할 수 있습니다. 이러한 구성 요소를 병합하면 해당 논리를 연결하게되어 나중에 논리에 문제가 발생할 수 있습니다.
Nzall

8
나는 일반적으로 이것에 동의하지만 그것이 "일회용"앱에 너무 집중되어 있다고 느낀다 : 당신은 코드를 작성하고 작동한다. 그러나 "장시간 지원"기능이있는 많은 앱이 있습니다. 코드를 작성하고 2 년 후 비즈니스 요구 사항이 변경되므로 코드를 조정해야합니다. 그때까지 많은 다른 코드가 그 코드에 의존 할 수 있습니다.이 경우 SOLID 원칙을 통해 변경이 쉬워집니다.
R. Schmitz

3
"재사용 가능한 코드를 작성하기 전에 사용 가능한 코드를 작성해야합니다"-매우 현명합니다!
Graham

10
실제 사용 사례가 나올 때까지 기다리면 SOLID 코드가 더 나아질 것 입니다. 가설에서 작업하는 것은 매우 어렵고 미래의 요구가 무엇인지 잘못 추측 할 수 있기 때문입니다. 우리 프로젝트에는 미래의 요구에 대해 SOLID이고 유연하게 설계된 여러 가지 사례가 있습니다. 미래의 요구는 당시에 아무도 생각하지 않은 것으로 밝혀졌습니다. 따라서 우리는 리팩토링 하고 추가 유연성이 필요했습니다. 리팩토링에 직면하거나 폐기해야하는 여전히 필요하지 않았습니다.
KRyan

2
또한 일반적으로 테스트 가능한 코드를 작성해야합니다. 이는 일반적으로 구체적인 구현에서 테스트 코드로 전환 할 수 있도록 첫 번째 추상화 계층을 갖는 것을 의미합니다.
Walfrat

49

내 경험으로는 앱을 작성할 때 세 가지 중에서 선택할 수 있습니다.

  1. 요구 사항을 충족시키기위한 코드 만 작성
  2. 미래의 요구 사항을 예상하고 현재 요구 사항을 충족시키는 일반 코드를 작성하십시오.
  3. 현재 요구 사항 만 충족하지만 나중에 다른 요구를 충족시키기 위해 쉽게 변경할 수있는 코드를 작성하십시오.

첫 번째 경우, 단위 테스트가없는 밀접하게 결합 된 코드로 끝나는 것이 일반적입니다. 쓰기는 빠르지 만 테스트하기는 어렵습니다. 그리고 요구 사항이 변경 될 때 나중에 변경하는 것은 올바른 왕의 고통입니다.

두 번째 경우, 미래의 요구를 예상하는 데 많은 시간이 소요됩니다. 그리고 미래의 요구 사항이 충족되지 않는 경우가 종종 있습니다. 이것은 당신이 묘사 한 시나리오처럼 보입니다. 대부분의 노력을 낭비하고 불필요하게 복잡한 코드를 생성하여 예상하지 못한 요구 사항이 발생할 때 변경하기가 여전히 어렵습니다.

마지막 경우는 제 관점에서 목표로하는 것입니다. TDD 또는 유사한 기술을 사용하여 코드를 테스트하면 느슨하게 결합 된 코드가 생겨서 수정하기는 쉽지만 작성하기는 쉽습니다. 그리고 이렇게하면 자연스럽게 많은 SOLID 원칙을 따르게됩니다. 작은 클래스와 기능; 인터페이스 및 주입 된 종속성. 그리고 Liskov 여사는 단일 책임을 가진 간단한 수업이 대체 원칙을 거의 따르지 않기 때문에 일반적으로 행복을 유지합니다.

여기에 실제로 적용되지 않는 SOLID의 유일한 측면은 개방 / 폐쇄 원칙입니다. 라이브러리와 프레임 워크의 경우 이것이 중요합니다. 자체 포함 된 앱의 경우 그리 많지 않습니다. 실제로 " SLID " 를 따르는 코드를 작성하는 경우가 있습니다. 쓰기 (읽기), 테스트 및 유지 관리가 용이합니다.


이 사이트에서 내가 가장 좋아하는 답변 중 하나!
TheCatWhisperer

1) 3)보다 테스트하기가 더 어렵다고 어떻게 결론 내릴지 잘 모르겠습니다. 변경하기가 더 어렵지만 테스트 할 수없는 이유는 무엇입니까? 어쨌든, 한마디로하는 소프트웨어는 일반적인 것보다 요구 사항을 쉽게 테스트 할 수 있습니다.
Mr Lister

@MrLister 두 가지 방식으로 진행됩니다. 1. 3보다 테스트하기가 더 어렵습니다. 그 정의는 "다른 요구를 충족시키기 위해 나중에 변경하기 쉬운 방식으로"작성되지 않았기 때문입니다.
Mark Booth

1
+0; IMVHO는 'O'(open-closed)가 작동하는 방식을 잘못 해석하고 있습니다 (일반적인 방법으로). 예를 들어 codeblog.jonskeet.uk/2013/03/15/…- 작은 코드베이스에서도 독립적으로 테스트하고 추가 할 수있는 자체 포함 코드 단위 (예 : 클래스, 모듈, 패키지 등)를 갖는 것에 관한 것입니다 필요에 따라 제거했습니다. 그러한 예 중 하나는 유틸리티 메소드 묶음입니다. 묶는 방식에 관계없이 '닫혀'있어야합니다.
vaxquis

BTW, 심지어 밥 아저씨도 한 번에 그런 식으로갑니다. “[폐쇄 된] 의미는 행동이 예상 된 방식으로 변경 될 때 쓸어 넘길 필요가없는 위치로 코드를 가져 오려고 노력한다는 것입니다. 시스템의 모든 모듈을 변경합니다. 이상적으로는 새로운 코드를 추가하고 기존 코드를 거의 또는 전혀 변경하지 않으면 서 새로운 동작을 추가 할 수 있습니다.” <-이것은 소규모 응용 프로그램이 수정되거나 수정되도록 의도 된 경우에도 적용됩니다 (IMVHO, 수정이 관련된 경우 그 ESP, 일반적인 경우입니다. 킬킬 웃음 )
vaxquis

8

개인적인 경험에 의해 당신이 가진 관점이 왜곡 될 수 있습니다. 이것은 개별적으로 정확한 사실의 미끄러운 기울기이지만 언뜻보기에는 정확 해 보이지만 결과 추론은 정확하지 않습니다.

  • 프레임 워크는 소규모 프로젝트보다 범위가 더 큽니다.
  • 더 큰 코드베이스에서는 나쁜 습관을 다루기가 훨씬 어렵습니다.
  • 프레임 워크를 구축하려면 (평균적으로) 소규모 프로젝트를 구축하는 것보다 숙련 된 개발자가 필요합니다.
  • 더 나은 개발자는 우수 사례 (SOLID)를 더 많이 따릅니다.
  • 그 결과, 프레임 워크는 좋은 연습을위한 높은 필요가 더 밀접하게 좋은 연습 경험이있는 개발자들에 의해 구축되는 경향이있다.

이는 프레임 워크 및 더 작은 라이브러리와 상호 작용할 때 상호 작용할 모범 사례 코드가 더 큰 프레임 워크에서 더 일반적으로 발견됨을 의미합니다.

이 오류는 매우 흔합니다. 예를 들어 제가 치료를받은 모든 의사는 거만했습니다. 그러므로 나는 모든 의사들이 거만하다고 결론지었습니다. 이러한 오류는 항상 개인적인 경험을 바탕으로 담요를 추론 하는 데 어려움을 겪 습니다.

귀하의 경우에는 작은 라이브러리가 아닌 더 큰 프레임 워크에서 주로 모범 사례를 경험했을 수 있습니다. 당신의 개인적 관찰은 틀리지 않지만 일화적인 증거이며 보편적으로 적용 할 수는 없습니다.


2 가지 프로그래밍 모드-요구 사항 및 KISS (일반 프로그래밍)를 통해 요구되는 내용을 다소 정확하게 생성하거나 다른 개발자가 필요로하는 유연성을 제공하는 매우 일반적이고 재사용 가능한 논리, 서비스 등을 생성 (프레임 워크 프로그래밍)

여기서 약간 확인하고 있습니다. 프레임 워크가 무엇인지 생각하십시오. 응용 프로그램이 아닙니다. 다른 사람들이 모든 종류의 응용 프로그램을 만드는 데 사용할 수있는 일반화 된 "템플릿"입니다. 논리적으로 이는 모든 사람이 사용할 수 있도록 프레임 워크가 훨씬 더 추상화 된 논리로 구축됨을 의미합니다.

프레임 워크 빌더는 후속 애플리케이션의 요구 사항이 무엇인지조차 모르기 때문에 단축키를 사용할 수 없습니다. 기본적으로 프레임 워크를 구축하면 다른 사람들이 자신의 코드를 사용할 수 있도록 장려합니다.

그러나 애플리케이션 빌더는 제품 제공에 중점을두기 때문에 논리적 효율성에 영향을 줄 수 있습니다. 그들의 주요 목표는 코드의 작동이 아니라 사용자의 경험입니다.

프레임 워크의 경우 최종 사용자는 코드와 상호 작용할 다른 개발자입니다. 코드 품질은 최종 사용자에게 중요합니다.
응용 프로그램의 경우 최종 사용자는 개발자가 아니며 코드와 상호 작용하지 않습니다. 코드의 품질은 중요하지 않습니다.

이것이 바로 개발 팀의 설계자가 종종 모범 사례의 집행자로 행동하는 이유입니다. 그것들은 제품 제공에서 제거되는 한 단계이므로 애플리케이션 자체의 제공에 초점을 맞추기보다는 코드를 객관적으로 보는 경향이 있습니다.


이러한 추상화의 진입 점을 추가하면 사용자 요구 사항을 실제로 충족 시키거나 기존 프레임 워크 및 기술 스택 위에 프레임 워크를 만들어 향후 추가를 쉽게 할 수 있습니까? 어떤 경우에 고객 또는 개발자의 이익을 위해 봉사하고 있습니까?

이것은 흥미로운 점이며, 사람들이 여전히 좋은 습관을 피하는 것이 정당화되는 주된 이유입니다.

아래 요점을 요약하면 : 현재 알려진대로 요구 사항을 변경할 수없는 경우에만 모범 사례를 건너 뛸 수 있으며 코드베이스에 변경 / 추가가 없을 것입니다. 스포일러 경고 : 거의 그렇지 않습니다.
예를 들어, 특정 파일을 처리하기 위해 5 분 콘솔 응용 프로그램을 작성할 때는 모범 사례를 사용하지 않습니다. 오늘은 응용 프로그램 만 사용할 예정이므로 나중에 업데이트 할 필요가 없습니다 (다시 필요할 경우 다른 응용 프로그램을 작성하는 것이 더 쉬울 것입니다).

4 주 안에 애플리케이션을 순조롭게 구축 할 수 있고 6 주 내에 애플리케이션을 올바르게 구축 할 수 있다고 가정 해 봅시다. 언뜻보기에, 그것을 건전하게 만드는 것이 더 좋아 보인다. 고객은 응용 프로그램을 더 빨리 얻을 수 있으며 회사는 개발자 임금에 더 적은 시간을 소비해야합니다. 승리?

그러나 이것은 미리 생각하지 않고 내려진 결정입니다. 코드베이스의 품질로 인해, 순조롭게 구축 된 코드를 크게 변경하는 데 2 ​​주가 걸리고, 올바르게 구축 된 코드를 동일하게 변경하는 데는 1 주일이 걸립니다. 앞으로 이러한 변경 사항이 많이있을 수 있습니다.

더욱이, 초기에 개발 된 코드베이스에서 생각했던 것보다 더 많은 작업이 예상치 않게 더 많은 작업을 필요 로하는 경향이있어 개발 시간을 2 주가 아닌 3 주로 단축시킬 수 있습니다.

그리고 버그를 찾는 데 시간을 낭비하는 경향이 있습니다. 최종 제품이 예상대로 작동한다는 가정하에 무심코 일하기 때문에 시간 제약으로 인해 로깅이 무시되거나 구현을 원하지 않는 프로젝트의 경우가 종종 있습니다.

주요 업데이트 일 필요도 없습니다. 현재 고용주에서 신속하고 더러운 여러 프로젝트를 보았으며 요구 사항의 잘못된 통신으로 인해 가장 작은 버그 / 변경이 필요한 경우 모듈 후 모듈을 리팩터링 해야하는 연쇄 반응으로 이어졌습니다 . 이 프로젝트 중 일부는 첫 번째 버전을 출시하기 전에 무너져 버렸습니다.

바로 가기 결정 (빠르고 더러운 프로그래밍)은 요구 사항이 정확하고 변경이 필요하지 않다는 결론을 확실하게 보장 할 수있는 경우에만 유용합니다 . 내 경험상, 나는 그것이 사실 인 프로젝트를 본 적이 없다 .

좋은 연습에 여분의 시간을 투자하는 것은 미래에 투자하는 것입니다. 기존 코드베이스가 모범 사례를 기반으로 구축되면 향후 버그 및 변경이 훨씬 쉬워집니다. 두세 번만 변경하면 이미 배당금을 지불하게됩니다.


1
이것은 좋은 답변이지만, 우리가 좋은 관행을 버린다고 말하는 것이 아니라 우리가 추구하는 '좋은 관행'수준은 무엇입니까? 나중에 다른 프로젝트로 교체해야 할 수 있기 때문에 모든 프로젝트에서 ORM을 추상화하는 것이 좋은 습관입니까? 나는 그렇게 생각하지 않는다. 수용하고자하는 특정 수준의 커플 링이있다 (즉, 나는 선택된 프레임 워크, 언어, ORM, 데이터베이스에 묶여있다). 우리가 SOLID를 극단주의 수준으로 따를 경우 실제로 선택한 스택 위에 자체 프레임 워크를 구현하고 있습니까?
Igneous01

OP의 경험을 "오류"로 거부하고 있습니다. 건설적이지 않습니다.
max630

@ max630 나는 그것을 거부하지 않습니다. 나는 OP의 관찰이 유효한 이유를 설명하는 답의 상당 부분을 보냈습니다.
Flater

1
@ Igneous01 SOLID는 프레임 워크가 아닙니다. SOLID는 프레임 워크에서보다 일반적으로 발생하는 추상화입니다. 모든 종류의 추상화 (SOLID 포함)를 구현할 때는 항상 합리적인 선이 있습니다. 추상화를 위해 추상화 할 수는 없으며 너무 지나치게 일반화 된 코드를 따라 가기가 어려울 수 있습니다. 당신이 합리적으로 의심하는 것이 미래에 당신에게 도움이 될 것이라고 추상화하십시오. 그러나 현재 데이터베이스 서버와 관련이 있다고 가정하면 함정에 빠지지 마십시오. 내일 어떤 데이터베이스가 출시 될지 모릅니다.
Flater

@ Igneous01 즉, 모든 것을 추상화하고 싶지 않은 올바른 아이디어가 있지만 그 방향으로 너무 멀리 기울어 져 있다는 느낌이 들었습니다. 개발자가 현재 요구 사항이 정해져 있다고 가정 한 다음 그 (가치가 큰) 가정을 기반으로 아키텍처 결정을 내리는 것은 매우 일반적입니다.
Flater

7

SOLID는 간단한 코드를 프레임 워크 코드로 어떻게 전환합니까? 나는 어떤 방식 으로든 SOLID의 표준은 아니지만 여기서 의미하는 바는 분명하지 않습니다.

  • KISS는의 본질이다 S 화롯불 책임 원리.
  • 에서 어디에도 없습니다 O의 펜 / 청산 원리 (내가 이해 이상으로 봐야 존 소총을 잘 한 일을하는 코드를 작성에 들어가). (실제로 코드에 더 집중할수록 "닫힌"부분이 더 중요해집니다.)
  • L의 iskov 대체 원리는 사람들이 클래스를 서브 클래 싱 할 필요가 말을하지 않습니다. 클래스 서브 클래 싱 하는 경우 서브 클래스는 수퍼 클래스의 계약을 이행해야합니다. 좋은 OO 디자인입니다. 하위 클래스가없는 경우에는 적용되지 않습니다.
  • KISS는 또한의 본질이다 I의 nterface 독방 원리.
  • D의 ependency 반전 원리 나 원격으로는 적용 볼 수있는 유일한 사람이지만, 나는 그것이 널리 오해와 과장된 생각합니다. 그렇다고 Guice 또는 Spring으로 모든 것을 주입해야한다는 의미는 아닙니다. 그것은 적절한 곳에서 추상화해야하고 구현 세부 사항에 의존하지 않아야 함을 의미합니다.

나는 Bob Martin 학교가 아니라 Gang of FourJosh Bloch 프로그래밍 학교를 통해 나왔기 때문에 SOLID 용어로 생각하지 않는다는 것을 인정 합니다. 그러나“SOLID”=“기술 스택에 더 많은 레이어 추가”라고 생각하면 잘못 읽고 있다고 생각합니다.


추신“개발자에게 더 나은 UX”의 이점을 짧게 판매하지 마십시오. 코드는 대부분의 수명을 유지 관리에 소비합니다. 개발자는 당신 입니다.


1
SRP와 관련하여-생성자를 가진 모든 클래스가 SRP를 위반한다고 주장 할 수 있습니다. 책임자는 해당 책임을 공장으로 오프로드 할 수 있기 때문입니다. OCP와 관련하여-이것은 실제로 프레임 워크 수준의 문제입니다. 외부 용으로 소비 할 인터페이스를 게시하면 수정할 수 없기 때문입니다. 인터페이스가 프로젝트 내에서만 사용되는 경우 자체 코드 내에서 계약을 변경할 수있는 권한이 있기 때문에 계약을 변경할 수 있습니다. ISP와 관련하여-각 개별 작업에 대해 인터페이스를 정의해야하므로 (SRP 보존) 외부 사용자와 관련이있을 수 있습니다.
Igneous01

3
1) 하나는 할 수 있지만, 듣는 가치가있는 사람은 아무도 없을 것입니다. 2) 하나의 프로젝트가 내부 인터페이스를 자유롭게 수정하는 것이 나쁜 생각이되는 크기로 얼마나 빨리 성장할 수 있는지에 놀랄 수 있습니다. 3) 1)과 2)를 참조하십시오. 당신이 세 가지 원칙 모두를 너무 많이 읽고 있다고 생각하기에 충분합니다. 그러나 의견은 실제로 이러한 주장을 다룰 장소가 아닙니다. 나는 당신이 그들 각각을 별도의 질문으로 제시하고 당신이 어떤 종류의 답변을 얻는 지 볼 것을 제안합니다.
David Moles

4
@ Igneous01이 논리를 사용하면 모든 변수 세터와 각 게터마다 하나씩 별도의 클래스를 만들 수 있으므로 게터와 세터를 버릴 수 있습니다. IE : class A{ int X; int Y; } class A_setX{ f(A a, int N) { a.X = N; }} class A_getX{ int f(A a) { return X; }} class A_setY ... etc.팩토리 클레임이 너무 메타적인 관점에서보고 있다고 생각합니다. 초기화는 도메인 문제의 측면이 아닙니다.
Aaron

@ 아론. 사람들은 SOLID를 사용하여 잘못된 주장을 할 수 있지만 나쁜 일을하는 것 =“SOLID를 따르는 것”을 의미하지는 않습니다.
David Moles
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.