这里有两种方法可以做同样的事情。一种是重复对方法Print的调用,其中另一种方法没有调用,而是有一个附加变量。
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语句目标定义消息,而不是定义+调用。我还认为,如果这个调用需要稍后更改,那么有一个唯一的调用就更清楚了。
应采用的最佳做法/模式是什么?
发布于 2015-07-16 20:22:23
显然,我会选择额外的变量方法,因为干法。可变名称还传递了论点的含义(例如,它可以是warning或log_entry,等等)。
发布于 2015-07-16 22:33:10
我还认为,如果这个调用需要稍后更改,那么有一个唯一的调用就更清楚了。
调用的唯一性也可能会发生变化。
如果没有任何参数,您可能不想再打印任何内容,而且在本例中根本不想调用Print。
我不认为你的问题有一个明确的答案,它总是取决于具体的用例。
发布于 2015-07-16 23:09:27
明天,你的老板会告诉你,他们想要的大部分信息是红色的,有些是蓝色的,还有额外的填充。你对这两种方法都有很大的兴趣。
您的程序类同时负责决策和打印。这样,单一责任原则就被打破了。
因此,我想补充更多的关注事项:
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!");
}
}https://softwareengineering.stackexchange.com/questions/289965
复制相似问题