MVC模式与其他2种模式的区别

本文关键字:模式 区别 2种 其他 MVC | 更新日期: 2023-09-27 18:14:15

你能告诉我它是工厂,策略还是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模式实现的差异,并作为我的代码。现在我弄不清我的代码是什么模式

MVC模式与其他2种模式的区别

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

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服务检索数据,或将数据显示为表或图。同样,这与Strategy模式相似。

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