-1

你能告诉我它是工厂、策略还是 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 模式差异的实现,它就像我的代码一样。现在我很困惑我的代码是什么模式。

4

1 回答 1

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 模式是一种确保向用户显示数据的代码不会与检索数据或操作应用程序的代码混在一起的方法。模型将数据保存在内存中,视图将其显示给用户,控制器允许用户与数据和应用程序进行交互。

Repository 和 Service 等可选模式将与外部数据源交互或执行任何业务逻辑的代码分开。

MVC 模式的优势在于,您可以交换各种组件的实现以执行诸如从数据库或 Web 服务检索数据,或将数据显示为表格或图形等操作。同样,这类似于策略模式。

您的代码具有模型和存储库的元素。但是(以及缺少其他组件)代码混合在一起,因此它不是真正的 MVC。

于 2013-05-17T20:23:42.823 回答