我制作了以下代码示例来学习如何使用泛型方法签名。
为了同时获得 Customer 和 Employee 的Display() 方法,我实际上开始用 Person 抽象类替换我的IPerson接口。
但后来我停了下来,想起了一个播客,其中 Bob 叔叔告诉 Scott Hanselman单一职责原则,其中你应该有很多小类,每个类都做一件特定的事情,即 Customer 类不应该有Print()和Save ()和CalculateSalary()方法,但您应该有一个CustomerPrinter 类 和一个CustomerSaver 类和一个CustomerSalaryCalculator 类。
这似乎是一种奇怪的编程方式。然而,摆脱我的界面也感觉不对(因为有很多 IoC 容器和 DI 示例固有地使用它们)所以我决定尝试单一责任原则。
因此,以下代码与我过去编写的代码不同(我会使用 Display() 方法创建一个抽象类并摆脱接口),但基于我听说的关于解耦和 SOLID 原则的内容,这个新的编码方式(接口和 PersonDisplayer 类) 我认为这是正确的方法。
我想听听其他人在这个问题上是否有同样的想法,或者是否经历过这个问题的积极或消极影响(例如,数量庞大的班级,每个班级都在做一件特定的事情,等等)。
using System;
namespace TestGeneric33
{
class Program
{
static void Main(string[] args)
{
Container container = new Container();
Customer customer1 = container.InstantiateType<Customer>("Jim", "Smith");
Employee employee1 = container.InstantiateType<Employee>("Joe", "Thompson");
Console.WriteLine(PersonDisplayer.SimpleDisplay(customer1));
Console.WriteLine(PersonDisplayer.SimpleDisplay(employee1));
Console.ReadLine();
}
}
public class Container
{
public T InstantiateType<T>(string firstName, string lastName) where T : IPerson, new()
{
T obj = new T();
obj.FirstName = firstName;
obj.LastName = lastName;
return obj;
}
}
public interface IPerson
{
string FirstName { get; set; }
string LastName { get; set; }
}
public class PersonDisplayer
{
private IPerson _person;
public PersonDisplayer(IPerson person)
{
_person = person;
}
public string SimpleDisplay()
{
return String.Format("{1}, {0}", _person.FirstName, _person.LastName);
}
public static string SimpleDisplay(IPerson person)
{
PersonDisplayer personDisplayer = new PersonDisplayer(person);
return personDisplayer.SimpleDisplay();
}
}
public class Customer : IPerson
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Company { get; set; }
}
public class Employee : IPerson
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int EmployeeNumber { get; set; }
}
}