Saya punya kelas: A
itu adalah gabungan dari sejumlah kelas yang lebih kecil B
,, C
dan D
.
B
, C
, Dan D
mengimplementasikan interface IB
, IC
dan ID
masing-masing.
Karena A
mendukung semua fungsionalitas B
, C
dan D
, A
implementasi IB
, IC
dan ID
juga, tetapi sayangnya hal ini menyebabkan banyak perutean ulang dalam implementasiA
Seperti itu:
interface IB
{
int Foo {get;}
}
public class B : IB
{
public int Foo {get {return 5;}}
}
interface IC
{
void Bar();
}
public class C : IC
{
public void Bar()
{
}
}
interface ID
{
string Bash{get; set;}
}
public class D: ID
{
public string Bash {get;set;}
}
class A : IB, IC, ID
{
private B b = new B();
private C c = new C();
private D d = new D();
public int Foo {get {return b.Foo}}
public A(string bash)
{
Bash = bash;
}
public void Bar()
{
c.Bar();
}
public string Bash
{
get {return d.Bash;}
set {d.Bash = value;}
}
}
Apakah ada cara untuk menyingkirkan pengalihan boilerplate ini A
? B
, C
dan D
semua mengimplementasikan fungsionalitas yang berbeda tetapi umum, dan saya suka A
mengimplementasikannya IB
, IC
dan ID
karena itu berarti saya dapat lulus dengan A
sendirinya sebagai ketergantungan yang cocok dengan antarmuka tersebut, dan tidak harus mengekspos metode pembantu dalam.
A
mengimplementasikan IB
, IC
dan ID
apakah rasanya lebih masuk akal untuk menulis Person.Walk()
sebagai kebalikan dari Person.WalkHelper.Walk()
, misalnya.