«object-oriented-design» 태그된 질문

객체 지향 디자인은 소프트웨어 문제를 해결하기 위해 객체 상호 작용 시스템을 계획하는 프로세스입니다.

16
소프트웨어 복잡성을 관리하려면 실제로 OO 언어가 필요합니까?
이것은 매우 기술적이지 않고 부드러운 질문이 될 것이며 이것이 올바른 플랫폼인지 확실하지 않습니다. 그러나 나는 CS 학생을 시작하여 여러분이 그것을 참기를 바랍니다. 첫 학기에는 Java 및 UML을 통해 캡슐화, 데이터 숨기기, 모듈화, 상속 등과 같은 OOP 개념을 소개했습니다. (자바는 나의 첫 프로그래밍 언어이다) 내가 이해하는 방식으로 OOP는 소프트웨어 복잡성을 관리하는 …

15
동작을 결정하기 위해 부울 매개 변수를 사용하는 것이 잘못 되었습니까?
나는 때때로“느끼는”느낌이 드는 관행을 보았지만, 그것에 대해 무엇이 잘못되었는지 분명히 말할 수는 없다. 아니면 내 편견 일 수도 있습니다. 간다 : 개발자는 부울을 매개 변수 중 하나로 사용하여 메서드를 정의하고 해당 메서드는 다른 메서드 등을 호출하며 결국 부울이 사용되어 특정 작업을 수행할지 여부를 결정합니다. 예를 들어 사용자에게 특정 권한이 있거나 …

14
4 인조는“패턴 공간”을 철저히 조사 했습니까?
적어도 10 년 전에 GoF (Gang of Four) 디자인 패턴 에 대해 처음 알게 된 이래로 ,이 23 개의 패턴은 패턴 공간 이라고 부르는 것보다 훨씬 큰 작은 샘플이어야한다는 인상을 받았습니다 . 이 가상의 패턴 공간 은 일반적인 객체 지향 소프트웨어 설계 문제에 대한 모든 권장 솔루션 (알거나 알 수 …

17
반환 값이없는 함수 / 메소드에서 NULL 또는 빈 값을 반환하는 것이 더 낫습니까?
나는 여기에 추천을 찾고 있습니다. 반환 값이 없거나 확인할 수없는 경우 NULL 또는 빈 값을 메서드에서 반환하는 것이 더 나은지 여부에 어려움을 겪고 있습니다. 다음 두 가지 방법을 예로 들어 보겠습니다. string ReverseString(string stringToReverse) // takes a string and reverses it. Person FindPerson(int personID) // finds a Person with a …

10
이것이 Liskov 대체 원칙을 위반합니까?
Task 엔터티 목록과 ProjectTask하위 유형 이 있다고 가정 해보십시오 . ProjectTasks상태가 시작됨 인 경우 닫을 수없는 경우 를 제외하고 작업은 언제든지 닫을 수 있습니다 . UI는 시작을 닫는 옵션을 ProjectTask사용할 수 없도록해야 하지만 도메인에는 다음과 같은 보호 조치가 있습니다. public class Task { public Status Status { get; set; } …

6
"비즈니스 로직"이란 무엇입니까?
PHP로 시작한 2009 년부터 웹 개발을하고 있습니다. ASP.NET으로 옮길 때이 "비즈니스 로직"과 "비즈니스 규칙"에 중점을 둔 DDD와 OOAD에 대해 많이 들었습니다. 요점은 지금까지 개발 한 모든 앱이 CRUD 작업에 관한 것이며 실제로는 이런 것을 본 적이 없다는 것입니다. 나는 실제로 그 것들이 실제로 무엇을 할 수 있는지 상상할 수 없습니다. …

13
깨끗한 코드 관행에 따라 더 많은 코드가 작성되는 것을 어떻게 정당화합니까?
중재자 메모이 질문에는 이미 17 개의 답변이 게시되었습니다. 새로운 답변을 게시하기 전에 기존 답변을 읽고 귀하의 견해가 이미 적절하게 다루어지지 않았는지 확인하십시오. Robert Martin의 "Clean Code"책에서 권장하는 몇 가지 관행, 특히 내가 사용하는 소프트웨어 유형에 적용되는 관행과 나에게 의미가있는 관행을 따랐습니다 (도그마로 따르지 않음). . 그러나 내가 알아 차린 부작용 …

12
SetWidth 및 SetHeight 메서드를 재정의하면 Rectangle에서 Square 상속이 문제가되는 이유는 무엇입니까?
사각형이 사각형 유형 인 경우 사각형에서 사각형을 상속 할 수없는 이유는 무엇입니까? 아니면 왜 나쁜 디자인입니까? 사람들이 말하는 것을 들었습니다. 사각형을 사각형에서 파생시킨 경우 사각형을 기대하는 모든 위치에서 사각형을 사용할 수 있어야합니다 여기서 무슨 문제가 있습니까? 사각형이 필요한 곳이라면 어디에서 Square를 사용할 수 있습니까? Square 객체를 생성하고 Square에 대한 SetWidth …

9
의존성 주입을 사용해야하는 이유는 무엇입니까?
종속성 주입을 사용해야하는 이유에 대한 리소스를 찾는 데 어려움을 겪고 있습니다 . 내가 보는 대부분의 리소스는 객체의 인스턴스를 객체의 다른 인스턴스로 전달한다고 설명하지만 왜 그럴까요? 이것은 깨끗한 아키텍처 / 코드만을위한 것입니까 아니면 성능 전체에 영향을 줍니까? 왜 다음을해야합니까? class Profile { public function deactivateProfile(Setting $setting) { $setting->isActive = false; } …

4
리치 도메인 모델 — 행동이 정확히 어떻게 적용됩니까?
Rich vs. Anemic 도메인 모델에 대한 토론에서 인터넷은 철학적 조언으로 가득하지만 권위있는 예는 부족합니다. 이 질문의 목적은 적절한 도메인 기반 디자인 모델의 결정적인 지침과 구체적인 예를 찾는 것입니다. (이상적으로 C #에서) 실제 예에서이 DDD 구현은 잘못된 것 같습니다. 아래의 WorkItem 도메인 모델은 Entity Framework에서 코드 우선 데이터베이스에 사용하는 속성 모음 …

11
C ++에서 모든 객체의 기본이 권장되지 않는 이유
Stroustrup은 "모든 클래스 (객체 클래스)에 대한 고유 한 기반을 즉시 발명하지 마십시오. 일반적으로 대부분 / 대부분의 클래스를 사용하지 않고도 더 잘 수행 할 수 있습니다." (C ++ 프로그래밍 언어 제 4 판, 1.3.4 절) 모든 것을위한 기본 클래스가 일반적으로 나쁜 생각 인 이유는 무엇이며 언제 만드는 것이 합리적입니까?

10
제안 된 디자인은 일반적으로 동료보다 나쁩니다. 어떻게하면 더 나아질까요? [닫은]
나는 몇 년 동안 프로그래밍을 해왔으며 일반적으로 문제를 해결하고 중소 규모의 스크립트를 만드는 데 능숙하지만 일반적으로 객체 지향 방식으로 대규모 프로그램을 설계하는 데 능숙하지 않습니다. 몇 가지 질문 최근에 나와 같은 경험을 가진 동료 가 문제를 해결하고있었습니다. 나는 그보다 더 긴 문제에 대해 연구하고 있었지만 더 나은 해결책을 찾았고 결국 …

12
오류를 발생시켜야 하는지를 나타내는 플래그가있는 것
나는 최근에 훨씬 더 오래된 개발자들 (약 50 세 이상)과 함께 일하기 시작했습니다. 그들은 시스템이 다운 될 수없는 항공을 다루는 중요한 애플리케이션에서 작업했습니다. 결과적으로 이전 프로그래머는 이런 식으로 코딩하는 경향이 있습니다. 그는 예외가 발생해야하는지 여부를 나타 내기 위해 객체에 부울을 넣는 경향이 있습니다. 예 public class AreaCalculator { AreaCalculator(bool shouldThrowExceptions) …

10
“사용자는 관리자인지 여부를 결정해서는 안됩니다. 권한 또는 보안 시스템이 필요합니다.”
이 질문에 사용 된 예제는 최소한의 데이터를 함수에 전달 하여 사용자가 관리자인지 아닌지를 결정하는 가장 좋은 방법을 제공합니다. 일반적인 대답은 다음과 같습니다. user.isAdmin() 이로 인해 여러 차례 반복되고 많은 투표가있었습니다. 사용자가 관리자인지 여부를 결정해서는 안됩니다. 권한 또는 보안 시스템이 있어야합니다. 클래스에 밀접하게 연결된다고해서 해당 클래스의 일부로 만드는 것이 좋은 생각은 …

9
단일 (공용) 메소드 만있는 클래스가 문제입니까?
현재 비디오 감시 영상에서 압축 및 색인 생성을 수행하는 소프트웨어 프로젝트를 진행 중입니다. 압축은 배경 및 전경 개체를 분할 한 다음 배경을 정적 이미지로 저장하고 전경을 스프라이트로 저장하여 작동합니다. 최근에 저는 프로젝트를 위해 디자인 한 클래스 중 일부를 검토하기 시작했습니다. 공용 메소드가 하나 뿐인 많은 클래스가 있음을 알았습니다. 이 수업 …

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.