-1

팩토리, 전략 또는 MVC 디자인 패턴이 무엇인지 알 수 있습니까? MVC 패턴과 다른 두 패턴의 차이점

public interface MainObject<T> 
{ 
    void add(); 
    T get(); 
} 

class Person1 : MainObject<Person1> 
{ 
    public Person1(int id, string name) 
    { 
     // define 
    } 

    public void add() 
    { 
     // add 
    } 

    public Person1 get() 
    { 
     // return 
    } 
} 

class Person2 : MainObject<Person2> 
{ 
    public Person2(int id, string name, bool status) 
    { 
     // define 
    } 

    public void add() 
    { 
     // add 
    } 

    public Person2 get() 
    { 
     // return 
    } 
} 

class Client 
{ 
    public User() 
    { 
    } 

    public void add<T>(T obj) where T : Object<T> 
    { 
     obj.add(); 
    } 

    public T get<T>(T obj) where T : Object<T> 
    { 
     return obj.get(); 
    } 
} 

static class Program 
{ 
    static void Main() 
    { 
     Client client = new Client(); 
     client.add(new Person1(123,"Duke")); 
     client.add(new Person2(456,"Dave",true)); 
     Person1 foundPerson1 = client.get(new Person1(123,null)); // (123,"Duke") 
     Person2 finedPerson2 = client.get(new Person1(null,"Dave",null)); // (456,"Dave",true) 
    } 
} 

나는 공장과 전략 패턴 내 코드를 작성,하지만 난 여기에 MVC MVC pattern differences의 실현을보고, 내 코드로입니다. 이제 나는 내 코드가 어떤 패턴인지 혼란스러워했다.

+6

그건 잘못되었습니다. 사물이 자신을 얻거나 창조하는 것은 의미가 없습니다. – SLaks

+1

공장 및 전략은 디자인 패턴이며, MVC는 아키텍처 패턴입니다. 기본적으로 두 벽돌과 집의 차이점은 무엇입니까? –

답변

0

전략 패턴은 구현과 관련된 호출 코드없이 다른 동작을 제공하는 방법입니다. 예를 들어 :

interface IPersonRepository{ 
    IPerson GetPerson(); 
} 

class PersonRepository : IPersonRepository{ 
    public IPerson GetPerson(){ 
     return GetDataFromDatabase(); 
    } 

    private IPerson GetDataFromDatabase(){ 
     // Get data straight from database. 
    } 
} 

class PersonRespositoryWithCaching : IPersonRepository{ 
    public IPerson GetPerson(){ 
     IPerson person = GetDataFromCache(); 
     // Is person in cache? 
     if(person!=null){ 
      // Person found in cache. 
      return person; 
     }else{ 
      // Person not found in cache. 
      person = GetDataFromDatabase(); 
      StoreDataInCache(person); 
      return person; 
     } 
    } 

    private IPerson GetDataFromCache(){ 
     // Get data from cache. 
    } 

    private IPerson GetDataFromDatabase(){ 
     // Get data straight from database. 
    } 
} 

class Program{ 
    static void Main(){ 
     IPersonRepository repository = null; 

     if(cachingEnabled){ 
      repository = new PersonRepositoryWithCache(); 
     }else{ 
      repository = new PersonRepository(); 
     } 

     // At this point the program doesn't care about the type of 
     // repository or how the person is retrieved. 
     IPerson person = repository.GetPerson(); 
    } 
} 

팩토리 패턴은 구조의 전략 패턴과 유사하지만 다른 일반적인 행동 공장은 다른 개체를 만들 구현보다는. 예를 들어

interface IPerson{} 

class SomePerson : IPerson{} 

class OtherPerson : IPerson{} 

interface IPersonFactory{ 
    void IPerson Create(); 
} 

class SomePersonFactory : IPersonFactory{ 
    public void IPerson Create(){ return new SomePerson(); } 
} 

class OtherPersonFactory : IPersonFactory{ 
    public void IPerson Create(){ return new OtherPerson(); } 
} 

MVC 패턴은 코드를 검색하거나 애플리케이션을 조작하기위한 코드와 혼합되지 않은 사용자 데이터를 표시하는 것을 보장하는 방식이다. 모델은 데이터를 메모리에 보유하고 뷰는이를 사용자에게 표시하고 컨트롤러는 사용자가 데이터 및 응용 프로그램과 상호 작용할 수있게합니다.

리포지토리 및 서비스와 같은 선택적 패턴은 외부 데이터 원본과 상호 작용하거나 비즈니스 논리를 수행하는 코드를 구분합니다.

MVC 패턴의 장점은 데이터베이스 또는 웹 서비스에서 데이터를 검색하거나 테이블 또는 그래프로 데이터를 표시하는 등 다양한 구성 요소의 구현을 바꿀 수 있다는 것입니다. 다시 말하지만, 이것은 전략 패턴과 유사합니다.

코드에는 모델 및 리포지토리의 요소가 있습니다. 그러나 (다른 구성 요소가 누락되었을뿐만 아니라) 코드는 함께 혼합되므로 진정한 MVC가 아닙니다.