在Main中调用Run方法时使用什么设计模式?

时间:2015-01-10 14:45:30

标签: c# design-patterns architecture

很多时候我看过程序内部的Main方法,独立于编程语言,有以下模式,但我不知道如何调用,为什么这样使用。在Main内使用以下内容可以获得什么?还有其他选择/变化吗?

class Program     
{     
    static void Main(string[] args)     
    {     
        new Program().Run();     
    }     

    private void Run()     
    {     
        var rep = new Repository();     

        dynamic data = rep.GetPerson();     
        Console.WriteLine(data.Name);  

        dynamic data2 = rep.GetPersonWrappedInAnonymousType();     
        Console.WriteLine(data2.Person.Name);     
    }     
}

提前致谢。

修改

此外,如果您在许多部分看到某些内容,那么它是一种模式。这是模式的定义!

3 个答案:

答案 0 :(得分:1)

使Program类能够被实例化(而不是使所有东西都是静态的)允许多个“程序”同时或一个接一个地运行。这对于测试目的很有用。

可能这个类中有实例字段。每次测试运行与其他测试运行隔离时,通过使用新实例。

现在,如果没有实例状态,这是无用的事情。

答案 1 :(得分:-1)

如果这是一种模式,那可能是责任分离的问题。您可以将其打包成一种方法:

class Program     
{     
    static void Main(string[] args)     
    {     
        var rep = new Repository();     

        dynamic data = rep.GetPerson();     
        Console.WriteLine(data.Name);  

        dynamic data2 = rep.GetPersonWrappedInAnonymousType();     
        Console.WriteLine(data2.Person.Name);     
    }     
}

但是编写它的人想要将程序的“开始”(标准的“主要”入口点)与要执行的实际任务分开(获取人员,获取人员等)。

“程序”类的实例化和对象是纯粹主义者的恕我直言。在单个项目中实际拥有这些对象的多个实例是非常罕见的。但是,Java / C#粉丝经常声称在OOP中“一切都是对象”并且鄙视所有static而不是绑定到对象的东西。 static void main对他们来说是一个巨大的痛苦,因此他们以这种方式快速地对程序类进行静电消除。我不想判断这一点,但我同意HansPassant的评论 - 看起来很危险。但对我来说,这没什么区别,只是一个微小的宇宙改变,正如我所说,特别是对于程序类而言,它几乎是无关紧要的。但我不会称之为“设计模式”。 “代码风格”或“实现模式”,但不是“设计”。在创建和运行“运行”方法时,实际上没有架构和算法。

如果你添加更多的位,一些定义Run()的通用接口,一些在运行时选择正确的程序实现,那么也许你可以进入,我不知道,也许设计模式称为“策略” “或”策略“......但这大多夸大了

答案 2 :(得分:-1)

不幸的是,没有人愿意回答我的问题所以我必须接受我自己的答案。但我相信有些人可以就此提供更多基于经验的答案。所以答案是肯定这是一种模式!被称为The command pattern

来自Wikipedia Article

  

在面向对象的编程中,命令模式是一种行为设计模式,其中一个对象用于表示和封装稍后调用方法所需的所有信息。此信息包括方法名称,拥有该方法的对象以及方法参数的值。

     

总是与命令模式相关的四个术语是命令,接收器,调用者和客户端。命令对象具有接收器对象,并以特定于该接收器类的方式调用接收器的方法。然后接收器完成工作。命令对象单独传递给调用该命令的调用者对象,并且可选地对命令执行进行簿记。任何命令对象都可以传递给同一个调用者对象。调用者对象和几个命令对象都由客户端对象持有。客户端包含关于在哪些点执行哪些命令的决策。要执行命令,它会将命令对象传递给调用者对象。

     

使用命令对象可以更容易地构造需要在选择时委托,排序或执行方法调用的通用组件,而无需知道方法的类或方法参数。使用调用程序对象可以方便地执行有关命令执行的簿记,以及实现命令的不同模式,这些模式由调用者对象管理,而不需要客户端知道簿记或模式的存在。