Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 模型创建者是如何命名的?_C#_Design Patterns - Fatal编程技术网

C# 模型创建者是如何命名的?

C# 模型创建者是如何命名的?,c#,design-patterns,C#,Design Patterns,标题信息量不大,所以我在这里解释: 在我的应用程序中,我有几个类,它们提供了管理数据的方法:例如,我删除了一个数据库条目,但在删除它之后,我必须在另一个地方删除一个文件。因为我在应用程序中的多个位置需要这个方法,所以我为所有这些方法创建了一个类。另一方面,我有很多函数,它们只是从数据库中获取一些数据,稍微处理它们,然后在一个简单的模型中返回它们 但是:我怎么称呼这样的班级呢?我在维基百科上找不到任何相应的设计模式 谢谢你的帮助。你刚才自己说的,它叫做模型,事实上你描述的与MVVM模式非常接近,M

标题信息量不大,所以我在这里解释:

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

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


谢谢你的帮助。

你刚才自己说的,它叫做模型,事实上你描述的与MVVM模式非常接近,MVVM模式代表:
模型-视图-视图-模型
,模型是类,只是对象的数据模板,所有处理都发生在视图模型上,视图是实际的GUI


你叫模特,不管他们是什么。。。如果它是一辆汽车,就称它为汽车,如果它是一所房子,就称它为房子,并将您的模型保存在一个单独的库中,这将为您的代码带来更多的结构。

关于保持方法和功能井然有序,我建议您查看

其思想是将方法包装到命令对象中,例如
DeleteDatabaseEntryCommand
DeleteFileCommand
LoadRecordsFromDatabaseCommand
。因此,您不必麻烦让一个uber类具有这些方法,只需创建您希望执行的命令的实例

我过去使用过这种模式,发现它非常灵活。我还使用了工厂设计模式和命令设计模式,如下所示:

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;
    }
}
公共接口ICommand
{
void Execute();
}
公共类CreateUserCommand:ICommand
{
public void Execute()
{
Console.WriteLine(“你好世界”);
}
}
公共类DeleteUserCommand:ICommand
{
私有只读int_userId;
公共DeleteUserCommand(int userId)
{
_userId=userId;
}
public void Execute()
{
Console.WriteLine(“删除”+_userId);
}
}
公共接口ICommandFactory
{
ICommand Create();
}
公共类CommandFactory:ICommandFactory
{
公共ICommand Create()
{
将Activator.CreateInstance()作为ICommand返回;
}
公共ICommand创建(对象[]args)
{
将Activator.CreateInstance(typeof(T),args)作为ICommand返回;
}
}
示例用法

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

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

        cmd.Execute();
    }
}
公共类程序
{
静态void Main(字符串[]参数)
{
var factory=newcommandfactory();
var cmd=factory.Create(新对象[]{23});
cmd.Execute();
}
}
请注意,每个命令都很好地分隔了逻辑,因此有关删除用户的任何信息都可以在
DeleteUserCommand
类中找到。我发现这有助于更轻松地记录我的系统


想想看,如果这是你需要的,那就酷吧。

不幸的是,你问的问题还不清楚。我们没有任何代码片段来获取任何上下文,也不了解您如何使用现有的类。这是因为您没有使用模式。如果你愿意,你可以使用命令模式,但我相信这不是你想要的。您可以创建一个类“Utils”,并将您的方法放在其中。因此,您可以将其作为单例使用,而不是一直创建新实例。具有与数据库通信的方法的类可以称为
存储库
。如果您使用
params
关键字定义参数,则在调用方法时无需显式创建数组。
args
参数仍然是可以传递给激活器的普通数组<代码>公共ICommand创建(参数对象[]args)