2009-03-13 3 views
0

클래스가 있고 정보 저장소가 웹 또는 Windows 응용 프로그램에서 사용되는 경우 의존하게 될 것입니다. 올바른 객체를 전달하기 위해 팩토리 패턴을 사용하려고했습니다. 개체를 다시 만들고 싶지 않으면 호출자가 해당 개체를 적절하게 저장한다고 생각합니다. 플랫폼을 기반으로 한 데이터 저장을 추상화하는 데 대한 다른 제안이 있습니까?환경에 기반한 클래스의 데이터 저장 (웹/창)

예를 들어, 적절한 하위 클래스를 보내는 Windows app에서 호출 할 때 데이터를 로컬 변수로 저장하고 웹 응용 프로그램에서 호출 할 때 Session에 저장하려고합니다.

+0

난 그냥 적절 아니라 전체 개체를 저장하는 자체가 그것에 대해 알고있는 클래스를 가질 수있다 ... – CSharpAtl

답변

1

sgreeve가 말했듯이 우려의 분리는 유지 보수 가능한 코드를 얻기 위해 고려해야 할 사항입니다.

저장소 아이디어를 사용하면 Winform 응용 프로그램과 웹 응용 프로그램이 자체 저장소 공급자를 삽입 할 수 있습니다. 이러한 공급자는 상속 또는 구성을 통해 필요한 경우 몇 가지 공통 논리를 공유 할 수 있습니다.

var provider = new WindowsStorageProvider(); 
var rep = new MyClassRepository(provider); 
rep.Save(myClassObject); 

및 웹 응용 프로그램 :

public class MyClassRepository 
{ 
    IStorageProvider _provider; 
    public MyClassRepository(IStorageProvider provider) 
    { 
     _provider = provider; 
    } 

    public void Save(MyClass o) 
    { 
     _provider.Save(o); 
    } 

    public MyClass GetBy(string id) 
    { 
     return _provider.GetBy(id); 
    } 
} 

윈폼 응용 프로그램을 통해 스토리지를 호출 할

var provider = new WebStorageProvider(); 
var rep = new MyClassRepository(provider); 
rep.Save(myClassObject); 
+0

동의 - 내가 설명하려고했던 구체적인 예입니다. :) – razlebe

+0

아주 좋은 지적 ... 그것은 내가 함께 사용해온 패턴입니다 ... 방금 여기에서 벗어났습니다 ... 감사합니다 ... – CSharpAtl

0

공장 패턴이 문제의 해결책 인 것처럼 들리지 않습니다. 팩토리 패턴은 클래스의 특정 하위 유형의 인스턴스를 제공하고 팩토리 호출자가 (a) 리턴되는 실제 부속 유형 및 리턴 할 부속 유형을 결정하기 위해 팩토리가 사용했던 논리를 보호합니다.

여기는 필요한 것이 아닙니다. 나는 당신이 데이터를 저장하는 데이터를 모델링하는 클래스로부터 데이터를 추상화 할 필요가 있다고 생각한다.

두 개의 응용 프로그램에 공통된 클래스가 있으며 각 응용 프로그램은 해당 응용 프로그램에 적합한 방식으로 클래스에 캡슐화 된 데이터를 저장하는 기능을 구현해야합니다. 다른 의해 사용되는 코드를 포함하지만, 둘 다 필요 - 멀리 데이터를 저장하는 것 할 기능을 포함해야

  1. 각 응용 프로그램 (웹 및 창 양식) : 그 두 가지를 의미한다. 예 : Windows Forms 앱은 웹 세션에서 데이터를 저장하는 방법을 알 필요가 없습니다. 따라서 웹 세션에 데이터를 저장하는 코드는 웹 응용 프로그램의 일부이지만 Windows Forms 응용 프로그램의 일부가 아닌 객체에 있어야하며 반대의 경우도 마찬가지입니다.

  2. 이 경우, 저장하려는 데이터의 클래스가 두 앱에 공통적이어야한다는 점을 고려하면 해당 저장 논리를 해당 클래스의 일부로 포함 할 수 없습니다. (즉, 미래의 변화 어렵게 만들 종속성을 도입으로 받아 들여 OO 설계 원칙에 따라, 그 클래스는, 어쨌든 응용 프로그램의 다른 부분에 자신을 멀리 저장하는 방법을 알고 있어야합니다. Single Responsibility Principle보기 ...)

이것이 도움이되기를 바랍니다.