【问题标题】:Differences between MVC pattern and other 2 patterns [closed]MVC 模式与其他 2 种模式之间的差异 [关闭]
【发布时间】:2013-05-17 18:16:13
【问题描述】:

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

【问题讨论】:

  • 那是错误的。对象获取或创建自己是没有意义的。
  • 工厂和策略是设计模式,MVC是架构模式。基本上你是在问两块砖和一栋房子有什么区别。

标签: c# design-patterns model-view-controller factory-pattern strategy-pattern


【解决方案1】:

策略模式是一种提供不同行为的方法,而调用代码不涉及实现。例如:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2023-03-19
    • 2012-12-03
    • 2013-08-06
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    相关资源
    最近更新 更多