Hice el siguiente ejemplo de código para aprender a usar una firma de método genérico.¿Es este un ejemplo del Principio de Responsabilidad Individual?
el fin de obtener un métodoPantalla() tanto para clientes y empleados, que en realidad comenzó a reemplazar mi interfaz IPerson con una clase abstracta persona.
Pero entonces se detuvo, recordando un podcast en el que el tío Bob estaba diciendo a Scott Hanselman sobre el Principio Responsabilidad Individual en el que usted debe tener un montón de pequeñas clases cada uno haciendo una cosa específica, es decir, que una clase de atención al cliente no debería tener un Imprimir() y Save() y CalculateSalary() método, sino que debe tener una clase CustomerPrinter y una clase CustomerSaver y una CustomerSalaryCalculator class.
Parece una forma extraña de programar. Sin embargo, deshacerse de mi interfaz también se sentía mal (ya que tantos contenedores IoC y ejemplos DI los usan inherentemente), así que decidí probar el Principio de Responsabilidad Individual.
Así el siguiente código es diferente de lo que he programado en el pasado (yo hubiera hecho una clase abstracta con un método de visualización() y se deshizo de la interfaz) pero en base a lo que he oído hablar de desacoplamiento y el SOLIDO principios, esta nueva forma de codificación (la interfaz y la clase PersonDisplayer) Creo que este es el camino correcto para ir.
Deseo me gustaría escuchar si otros piensan lo mismo sobre este tema o si han experimentado efectos positivos o negativos (por ejemplo, un número difícil de clases cada uno haciendo una cosa en particular, etc.).
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; }
}
}
Pregunta similar http://stackoverflow.com/questions/1215442/confused-about-responsibility-principle-in-the-following-example –