내 추론 과정을 살펴 보겠습니다 :
클래스 메소드
기본 원칙 : 지속성 클래스 동작이며
당신은의 분리를 필요로하는 클래스의 방법이어야한다, 그래서 당신은 넣어 DAO 클래스에서 데이터베이스를 다루고, 클래스의 메서드를 사용하여 메서드를 구현합니다.
첫 번째 문제 : 다른 DAO 세트를 지원해야하는 경우 공장을 통해 DAO를 만들어야합니다. 두 번째 문제 : 모든 지속성 동작이 구체적으로 클래스 인스턴스와 관련있는 것은 아닙니다. 예를 들어 List 및 Search 메소드는 클래스가 아니라 클래스 목록을 반환하며 인스턴스에 의존하지 않습니다. 그래서 그들은 근본적으로 정적 메서드입니다.
세 번째 문제 :이 클래스에서 상속을 지원하려고합니다. 이와 같이, 지속성 세부 사항은 부모마다 다릅니다. 정적 메서드가 있다면 문제가 될 것입니다.
그래서 당신은
컨트롤러로 이동
기본 원칙 : 지속성 방법은 하나의 클래스에 속하지 않는, 그들은 더 크고, 따라서 그들은
는 우려의 분리가 필요한 구분해야 다시 DAO가 필요합니다. 이것은 유틸리티 클래스이므로 메서드는 모두 기본적으로 입니다.
첫 번째 문제 : 하나 이상의 지속성 방법을 지원하려면 DAO를 만드는 공장이 필요합니다.
두 번째 문제 : 정적 클래스를 사용할 수 없도록 클래스 계층 구조를 지원하려고합니다. 팩토리를 통해 컨트롤러를 생성해야합니다.
세 번째 문제 : 개발자에게 지나치게 복잡한 API를 제공하고 있습니다. 클라이언트 코드의
예 :
PurchaseOrder po;
PurchaseOrderController poc;
poc = PurchaseOrderControllerFactory.Instance.Create();
po = poc.GetPurchaseOrder(42);
// do stuff
poc.SavePurchaseOrder(po);
그때 나는 처음부터 시작합니다. 행동에서
시작
기본 원칙 : 지속성은 동작하지 않습니다. 행동은 지속성보다 큽니다.
시스템에는 구매 주문 하위 시스템이 있습니다. 귀하의 사용자는 높은 수준 (유스 케이스 수준)에서만 그것과 상호 작용할 수 있습니다. 따라서이 메소드는 구매 주문 사용 사례를 구현합니다. 이 메소드는 필요한 경우 DAO를 사용하여 데이터베이스에 액세스하고 필요한 작업을 수행합니다.
간단히 말해서 PurchaseOrder는 기본적으로 데이터를 전달하는 빠른 방법 인 DTO입니다. 그것은 행동을 가져서는 안됩니다.
클라이언트 코드의 예 :
// It could be a factory if needed.
PurchaseOrderSystem pos = new PurchaseOrderSystem();
List<PurchaseOrder> transacted;
transacted = pos.TransactPurchaseOrders(john, 23);
// Show transacted purchase orders or whatever...