나는 USB HID와 통신하기위한 기능을 제공 할 클래스 라이브러리를 작성 중이다.복잡한 런타임 객체 생성을위한 메소드
UsbHid
(모델의 USB HID) 가
UsbHidReport
(보고서 인코딩/디코딩 제공)UsbHidReportStream
은 (메커니즘을 제공한다 : 상기 통신 메커니즘을 제공하는 서로 긴밀히 협력 특히 세 가지 종류가있다 읽기/쓰기 작업의 경우)
이러한 클래스의 인스턴스는 관심있는 USB HID가 감지되면서 만들어지며 작성을 용이하게하기 위해를 구현했습니다.패턴. 이 부분은 합리적으로 행복합니다.
내 문제는 내가 UsbHidReport
과 UsbHidReportStream
에 의존성을 가지고있는 UsbHid
최종 빌드를 어떻게 깔끔하게 관리하는지에 관한 것입니다.
public class UsbHid(string str, UsbHidReport report, UsbHidReportStream stream)
내가 이상적으로 그들은 내가 다음 반환을 결정하는 데 사용에 필요한 정보 내 라이브러리를 제공 의미, 가능한 한 client
에서 작성 과정의만큼을 제거하고 싶습니다.
예를 들어 :
var usbStream = streamFactory.Create(parameters);
var usbReport = reportFactory.Create(parameters);
var usbHid = hidFactory.Create(parameters, usbReport, usbStream);
선호겠습니까 나는 client
가 공급 것이라고하는 이는 builder
패턴을 사용하여 고려하고 그래서
var usbHid = creationalObject.GetHid(parameters);
회피하는 것을 선호 필수 매개 변수. UsbHidReport
및 UsbHidReportStream
의 인스턴스를 구성하여 개체를 만드는 데 사용하기 때문에 나중에 client
으로 반환됩니다.
오브젝트 생성의 구현을 client
에서 숨기는 개념과 비슷하지만 많은 시간 동안 오브젝트 생성을 하나의 builder
오브젝트로 래핑하는 것이 불안 스럽습니다.
나는 소프트웨어가 단순히 흑백이 아니며 모든 것이 프로와 콘을 가지고 있다는 것을 깨닫는다. 그것은 내가 이것을 스스로 숙고하고 있다고 말하면 다른 사람들이 더 적절한 해결책이라고 생각하는 것을 알고 싶다.
- 는
- 는
- 기타
builder
객체를 사용하여client
는 객체 생성 을 구현하기 위해 허용 하시겠습니까?
왜 공장에서 UsbHid를 만들고 'UsbHid'가'UsbHidReport'와'UsbHidReportStream'을 만들지 않습니까? 정말로 공장이 필요합니까? 팩토리의 요점은 클라이언트가 객체를 생성 할 수있는 능력을 부여한다는 것입니다. – Euphoric
@ 유포러스 - 'UsbHid'가 의존성을 만드는 방법에 신경 쓰지 말고 단지 소비 할 수 있으므로 우려 원칙을 깨뜨리는 것처럼 보입니다. 팩토리는 객체를 생성하는 능력을 '클라이언트'에 제공합니다. 구체적인 구현은 '클라이언트'보다는 팩토리에 의해 결정됩니다. –
그들은 정말로 의존성입니까? 예를 들어, usbStream과 usbReport가 완전히 다른 usbHid를 동일한 매개 변수로 만들 수 있습니까? – Euphoric