Ho fatto il seguente esempio di codice per imparare come usare una firma del metodo generico.Si tratta di un esempio del principio di responsabilità unica?
Al fine di ottenere un metodo Display() sia per clienti e dipendenti, in realtà ho iniziato la mia sostituzione IPerson interfaccia con una classe astratta Person.
Ma poi ho smesso, ricordando un podcast in cui lo zio Bob stava dicendo Scott Hanselman sulla Responsabilità unico principio in cui si dovrebbe avere un sacco di piccole classi ciascuna fare una cosa specifica, vale a dire che una classe cliente non dovrebbe avere un stampa() e Save() e CalculateSalary() metodo, ma che si dovrebbe avere un classe CustomerPrinter e una classe CustomerSaver e Classe CustomerSalaryCalculator.
Sembra un modo strano di programmare. Tuttavia, lo ha eliminato la mia interfaccia anche in modo errato (dal momento che molti contenitori IoC e gli esempi DI li usano intrinsecamente), quindi ho deciso di provare il Principio della singola responsabilità.
Così il seguente codice è diverso da quello che ho programmato in passato (avrei fatto una classe astratta con un metodo display(), ma ho sbarazzarsi dell'interfaccia), ma sulla base di quello che ho sentito parlare di disaccoppiamento e il SOLIDO principi, questo nuovo modo di codificare (l'interfaccia e la classe PersonDisplayer) Penso che questo sia il modo giusto di andare.
Vorrei piacerebbe sentire se altri pensano allo stesso modo su su questo problema o hanno avuto effetti positivi o negativi di questo (ad esempio un numero ingombrante di classi ciascuno facendo una cosa particolare, ecc.).
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; }
}
}
Domanda simile http://stackoverflow.com/questions/1215442/confused-about-single-responsibility-principle-in-the-following-example –