首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用变量+方法调用还是重复调用?

使用变量+方法调用还是重复调用?
EN

Software Engineering用户
提问于 2015-07-16 20:17:24
回答 4查看 229关注 0票数 2

这里有两种方法可以做同样的事情。一种是重复对方法Print的调用,其中另一种方法没有调用,而是有一个附加变量。

代码语言:javascript
复制
class Program
{
    static void Main(string[] args)
    {
        Snippet1(args);
        Snippet2(args);
    }

    private static void Snippet1(string[] args)
    {
        string message;
        if (args.Length == 0)
        {
            message = "No argument";
        }
        else
        {
            message = string.Format("Argument Count = {0}", args.Length);
        }
        Print(message);
    }

    private static void Snippet2(string[] args)
    {
        if (args.Length == 0)
        {
            Print("No argument");
        }
        else
        {
            Print(string.Format("Argument Count = {0}", args.Length));
        }
    }

    private static void Print(string s)
    {
        Console.WriteLine(s);
    }
}

我个人不喜欢进行两次相同的调用,我更喜欢使用一个变量来使if语句目标定义消息,而不是定义+调用。我还认为,如果这个调用需要稍后更改,那么有一个唯一的调用就更清楚了。

应采用的最佳做法/模式是什么?

EN

回答 4

Software Engineering用户

发布于 2015-07-16 20:22:23

显然,我会选择额外的变量方法,因为干法。可变名称还传递了论点的含义(例如,它可以是warninglog_entry,等等)。

票数 3
EN

Software Engineering用户

发布于 2015-07-16 22:33:10

我还认为,如果这个调用需要稍后更改,那么有一个唯一的调用就更清楚了。

调用的唯一性也可能会发生变化。

如果没有任何参数,您可能不想再打印任何内容,而且在本例中根本不想调用Print

我不认为你的问题有一个明确的答案,它总是取决于具体的用例。

票数 3
EN

Software Engineering用户

发布于 2015-07-16 23:09:27

明天,你的老板会告诉你,他们想要的大部分信息是红色的,有些是蓝色的,还有额外的填充。你对这两种方法都有很大的兴趣。

您的程序类同时负责决策和打印。这样,单一责任原则就被打破了。

因此,我想补充更多的关注事项:

代码语言:javascript
复制
class Program {
    public static void Main(string[] args) {
        var simplePrinter = new SimplePrinter();
        var errorPrinter = new ErrorPrinter();

        var objectWithError = new MyObject(errorPrinter);
        objectWithError.DoSomething();

        var simpleObject = new MyObject(simplePrinter);
        simpleObject.DoSomething();
    }
}

public interface IConsolePrinter {
    void Print(string s);
}

public class SimplePrinter : IConsolePrinter {
   public void Print(string s) {
       Console.WriteLine(s);
   }
}

public class ErrorPrinter : IConsolePrinter {
   public void Print(string s) {
       Console.WriteLine(String.Format("**** ERROR: {0}", s));
   }
}

public class MyObject {
    private ConsolePrinter _printer;

    public MyObjectThatUsesConsolePrinter(IConsolePrinter printer) {
        _printer = printer;        
    }

    public void DoSomething() {
        _printer.Print("Love OOP! Respect Single Responsibility Principle!");
    }
}
票数 3
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/289965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档