如何调用模型创建者?

时间:2013-12-11 15:34:06

标签: c# design-patterns

标题不是很有用,所以我在这里解释一下:

在我的应用程序中,我有一些类,它们提供了管理数据的方法:例如,我删除了一个数据库条目,但在删除它之后,我必须删除另一个地方的文件。因为我需要在我的应用程序的多个位置使用此方法,所以我为所有这些方法创建了一个类。另一方面,我有很多函数,只是从数据库中获取一些数据,稍微处理它们并在一个简单的模型中返回它们。

但是:我怎么称这样的课?我在维基百科上找不到任何相应的设计模式。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

关于保持您的方法和功能组织良好,我建议您查看Command Design Pattern(也http://www.dofactory.com/Patterns/PatternCommand.aspx

我们的想法是将您的方法包装到命令对象中,例如DeleteDatabaseEntryCommandDeleteFileCommandLoadRecordsFromDatabaseCommand。因此,您不必费心拥有一个具有这些方法的超级类,只需创建一个您希望执行的命令实例。

我过去曾使用过这种模式,并且发现它非常灵活。我还使用了具有Command设计模式的Factory设计模式,如下所示:

public interface ICommand
{
    void Execute();
}

public class CreateUserCommand : ICommand
{
    public void Execute()
    {
        Console.WriteLine("Hello World");
    }
}

public class DeleteUserCommand : ICommand
{
    private readonly int _userId;

    public DeleteUserCommand(int userId)
    {
        _userId = userId;
    }

    public void Execute()
    {
        Console.WriteLine("Deleting " + _userId);
    }
}

public interface ICommandFactory
{
    ICommand Create<T>();
}

public class CommandFactory : ICommandFactory
{
    public ICommand Create<T>()
    {
        return Activator.CreateInstance<T>() as ICommand;
    }

    public ICommand Create<T>(object[] args)
    {
        return Activator.CreateInstance(typeof(T), args) as ICommand;
    }
}

使用示例

public class Program
{
    static void Main(string[] args)
    {
        var factory = new CommandFactory();

        var cmd = factory.Create<DeleteUserCommand>(new object[] { 23 });

        cmd.Execute();
    }
}

注意每个命令如何很好地分离逻辑,因此您需要了解有关删除用户的任何信息都可以在DeleteUserCommand类中找到。我发现这有助于记录我的系统。

想一想,如果它是套房你需要的东西那么酷。

答案 1 :(得分:0)

嗯,你只是说你的自己,它被称为模型,实际上你的描述与MVVM模式非常接近,代表:Model-View-ViewModel,模型是class,它只是对象的数据模板,ViewModel,其中所有处理都发生,视图是实际的GUI。

你打电话给模特,无论它们是什么......如果它是一辆汽车,称之为汽车,如果它是房子,称之为房子,并将你的模型保存在一个单独的库中,它将带来更多的结构你的代码。