«class-design» 태그된 질문

업계에서 가장 잘 알려진 클래스를 디자인하는 방법에 대한 일반 지침.

5
생성자를 어떻게 분해 할 수 있습니까?
Enemy 클래스가 있다고 가정하면 생성자는 다음과 같습니다. public Enemy(String name, float width, float height, Vector2 position, float speed, int maxHp, int attackDamage, int defense... etc.){} 생성자가 너무 많은 매개 변수를 가지고 있기 때문에 이것은 좋지 않지만 Enemy 인스턴스를 만들 때 이러한 모든 것을 지정해야합니다. 또한 Enemy 클래스에서 이러한 속성을 원하므로 …

9
언제 개인 / 이너 클래스를 사용해야합니까?
명확히하기 위해, 내가 묻는 것은 public class A{ private/*or public*/ B b; } vs. public class A{ private/*or public*/ class B{ .... } } 나는 분명히 하나 또는 다른 것을 사용해야하는 몇 가지 이유를 생각할 수 있지만 실제로보고 싶은 것은 장단점이 학문이 아니라는 것을 보여주는 설득력있는 예입니다.

7
“Info”접미사를 사용하여 클래스 이름을 정하는 아이디어는 무엇입니까 (예 :“SomeClass”및“SomeClassInfo”)?
실제 장치를 다루는 프로젝트에서 일하고 있으며이 프로젝트에서 일부 클래스의 이름을 올바르게 지정하는 방법에 대해 혼란스러워했습니다. 실제 장치 (센서 및 수신기)가 한 가지이며 소프트웨어에서 의 표현 이 다른 것도 고려할 때 "Info"접미사 이름 패턴으로 일부 클래스의 이름을 지정하려고합니다. 예를 들어, a Sensor는 실제 센서를 나타내는 클래스이지만 (실제로 일부 작동 장치에 연결된 …

4
구현 (HashMap) 대신 인터페이스 (예 : Map)를 사용하여 Java 객체를 정의해야하는 이유
대부분의 Java 코드에서 사람들은 다음과 같이 Java 객체를 선언합니다. Map<String, String> hashMap = new HashMap<>(); List<String> list = new ArrayList<>(); 대신에: HashMap<String, String> hashMap = new HashMap<>(); ArrayList<String> list = new ArrayList<>(); 실제로 사용될 구현이 아닌 인터페이스를 사용하여 Java 객체를 정의하는 것이 선호되는 이유는 무엇입니까?

7
불변 클래스는 어떤 시점에서 부담이 되는가?
데이터 모델을 보유 할 클래스를 설계 할 때 읽은 것은 불변의 객체를 만드는 것이 유용 할 수 있지만 생성자 매개 변수 목록과 딥 카피의 부담이 너무 커져 불변의 제한을 포기해야합니까? 예를 들어, 여기에 명명 된 것을 나타내는 불변 클래스가 있습니다 (C # 구문을 사용하고 있지만 원칙은 모든 OO 언어에 적용됩니다) …

2
'유틸리티 함수'클래스 길들이기
Java 코드베이스에서 나는 다음과 같은 패턴을 계속보고 있습니다. /** This is a stateless utility class that groups useful foo-related operations, often with side effects. */ public class FooUtil { public int foo(...) {...} public void bar(...) {...} } /** This class does applied foo-related things. */ class FooSomething { int …

4
스레드 / 백그라운드 작업자를 클래스에 배치하는 것이 "잘못된"/ 잘못된 디자인입니까?
Excel (C # 및 .Net 4)에서 읽을 클래스가 있고 해당 클래스에는 UI에서 응답을 유지하면서 Excel에서 데이터를로드하는 백그라운드 작업자가 있습니다. 내 질문은 다음과 같습니다 : 수업에 배경 근로자가있는 것이 나쁜 디자인입니까? 수업없이 수업을 만들고 백그라운드 작업자를 사용하여 수업을 진행해야하나요? 나는 이런 식으로 수업을 만드는 데 실제로 어떤 문제도 보이지 않지만 다시 …


3
RxJava 클래스 Flowable이 합법적으로 460 개의 메소드를 가질 수 있습니까?
Java의 ReactiveX 구현 인 RxJava ( Rx 및 Reactive Extensions 라고도 함)를 막 시작했습니다 . 실제로 나를 놀라게 한 것은 RxJava의 Flowable 클래스 의 거대한 크기였습니다 . 460 개의 메소드가 있습니다! 공정하게 : 오버로드 된 메소드가 많으므로 총 메소드 수에 상당한 영향을 미칩니다. 아마도이 클래스는 분리되어야하지만 RxJava에 대한 나의 지식과 …

4
수업에 대한 단일 책임 패턴은 얼마나 구체적이어야합니까?
예를 들어, 콘솔 게임 프로그램에 콘솔에 대한 모든 종류의 입력 / 출력 방법이 있다고 가정하십시오. 하나에 모두 유지하는 스마트겠습니까 inputOutput클래스 또는 같은보다 구체적인 클래스로 분해 startMenuIO, inGameIO, playerIO, gameBoardIO, 각 클래스 1-5 방법에 대해이 등 있도록? 같은 메모에서 그것들을 분류하는 것이 낫다면 IO네임 스페이스 에 배치하는 것이 현명 할 것입니다 …

5
공장으로서의 기본 수업?
주말 동안 코드를 작성하고 있었고 기본 클래스에서 정적 메소드로 팩토리를 작성하려고한다는 것을 알았습니다. 내 질문은 이것이 ac # idomatic 접근법인지 단순히 아는 것입니까? 기본 클래스에는 파생 클래스에 대한 지식이 있다는 사실에서 비롯되지 않을 수도 있습니다. 즉, 동일한 결과를 얻는 더 간단한 방법은 확실하지 않습니다. 다른 모든 공장 ​​클래스는 (최소한) 불필요한 …
14 c#  class-design 

3
인터페이스를 행동으로하는 추상 기본 클래스?
C # 프로젝트의 클래스 계층을 디자인해야합니다. 기본적으로 클래스 기능은 WinForms 클래스와 유사하므로 WinForms 툴킷을 예로 들어 보겠습니다. (그러나 WinForms 또는 WPF를 사용할 수 없습니다.) 모든 클래스가 제공해야하는 몇 가지 핵심 속성과 기능이 있습니다. 치수, 위치, 색상, 가시성 (true / false), 그리기 방법 등 디자인 조언이 필요합니다. 추상적 인 기본 클래스와 …

2
디자인 : 객체를 매개 변수로 사용하는 별도의 클래스 방법과 객체 방법?
예를 들어 다음을 수행하는 것이 좋습니다. Pdf pdf = new Pdf(); pdf.Print(); 또는: Pdf pdf = new Pdf(); PdfPrinter printer = new PdfPrinter(); printer.Print(pdf); 또 다른 예: Country m = new Country("Mexico"); double ratio = m.GetDebtToGDPRatio(); 또는: Country m = new Country("Mexico"); Country us = new Country("US"); DebtStatistics ds = …

4
단일 책임을 가진 큰 클래스
2500 라인 Character클래스가 있습니다. 게임에서 캐릭터의 내부 상태를 추적합니다. 해당 상태를로드하고 유지합니다. ~ 30 개의 들어오는 명령을 처리합니다 (보통 =는 명령을 전달 Game하지만 일부 읽기 전용 명령은 즉시 응답합니다). Game취한 조치 및 타인의 관련 조치와 관련하여 ~ 80 개의 전화를받습니다 . Character캐릭터의 상태를 관리하고 들어오는 명령과 게임을 중재하는 것은 하나의 …

2
"계산 된"값을 속성 또는 메서드로 노출해야합니까?
웹 콘텐츠 관리 시스템의 콘텐츠 유형을 나타내는 C # 클래스가 있습니다. 웹 컨텐츠 편집기가 오브젝트 표시 방법에 대한 HTML 템플리트를 입력 할 수있는 필드가 있습니다. 기본적으로 객체 속성 값을 HTML 문자열로 대체하기 위해 핸들 바 구문을 사용합니다. <h1>{{Title}}</h1><p>{{Message}}</p> 클래스 디자인 관점에서 형식화 된 HTML 문자열 (대체 포함)을 속성 또는 메서드 …

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