첫째,의는 팩토리 메소드 패턴의 의도를 살펴 보자 :
객체를 생성하기위한 인터페이스를 정의하지만,하자 서브 클래스는 인스턴스화하는 클래스 결정합니다. 팩토리 메서드를 사용하면 클래스에서 하위 클래스에 인스턴스화를 연기 할 수 있습니다.
귀하의 문제에 해당합니까? 도메인 개체를 만드는 것보다 쿼리를 관리하는 방법에 더 많은 관심이 있습니다.
IMHO, 정적 클래스/메서드가 포함 된 구현 대안을 피할 수 있습니다. 정적 클래스에서 상속 할 수 없으므로 모델의 확장 성이 제한됩니다. 정적이 아닌 클래스의 정적 메서드도 마찬가지입니다. 하위 클래스에서는 재정의 할 수 없습니다.
도메인 개체에도 쿼리 메서드를 추가하지 않을 것입니다.OOP를 사용하여 실제 세계를 모델링한다는 것을 명심하십시오. 주문을 다른 주문을 검색하도록 요청하는 것이 합리적입니까?
현실 세계에서 주문을 사용하여 특정 정보 (날짜, 고객 이름 또는 관련 제품)를 가져옵니다. 주문을 찾고 싶을 때, 어디서나 보관하고 찾으십시오 (예 : 파일 캐비닛). 즉, 다른 주문을 검색하기 위해 주문을 사용하지 않습니다.
염두에두고 소프트웨어에서이 상황을 모델링해야합니다. 주문 및 제품을 모델링 한 객체가 이미 있습니다. 누락 된 것은 주문을 저장하고 검색하는 데 사용하는 장소를 모델링 한 객체입니다.
일반적으로 이러한 종류의 개체 (다른 개체를 저장하거나 검색하는 개체)는 저장소라고합니다. 귀하의 경우 ClientOrderRepository라는 이름을 붙일 수 있습니다. 이 개체는 무엇을할까요? 글쎄, 당신은 이미 그것을 언급 : 당신이 필요로하는 네 가지 쿼리를 수행합니다. 의는 인터페이스 가능한 정의를 보자 :
public interface IClientOrderRepository {
ClientOrder FindOrderWithIdMatching(int anOrderId);
ClientOrder FindOrderWithClientNameMatching(string aClientName);
ClientOrder FindOrderWithProductNameMatching(string aProductName);
ClientOrder FindOrderWithProductIdMatching(string aProductId);
}
당신이, 당신은 싱글 톤 패턴을 사용하여이 인터페이스를 구현하는 클래스의 인스턴스가 필요합니다. 나중에 변경할 수없는 구현 방법 (예 : 정적 방법 1)에 의존하지 마십시오.
마지막으로 문제를 해결하는 특정 패턴을 찾았 으면 개체와 작업을 완료하기 위해 공동 작업하는 방식에 대해 생각하는 것이 좋습니다. 실생활의 은유를 사용하여 실종해야 할 물건이나 책임을 찾을 수 있습니다. 결국, 그것은 객체 지향 패러다임의 본질에 관한 것입니다. 저장소 패턴에 대한 더 깊은 정보에 대한
, 여기 당신이 시작하는 일부 리소스는 다음과 같습니다
바스, 내가 정적 메서드/클래스를 구현할 수 있습니다. 커뮤니티에서 어떤 패턴을 사용해야하며 왜 사용해야하는지 더 잘 이해하고 싶었습니다. 아마도 나는 프로그래밍 세계와 초보자에게 5 개월이라는 것을 덧붙여 야합니다. –
+1 - '패턴'은이 상황에서 구현하려는 것보다 낫습니다. 원하는 메서드를 사용하여 클래스를 만듭니다. 일단 너무 커지거나 복잡 해지면 리팩터링하십시오. –