我使用的语言是C#。
我想问一个建筑性质的问题。
假设我们有classA:
public class classA
{
public IParameters Parameters {get; set;}
public classA(IParameters parameters)
{
Parameters = parameters;
}
// here goes the methods of the class
}
接口IParamaters如下:
public Interface IParameters
{
public int Id {get; set;}
public string FirstName {get; set;}
public string LastName {get; set;}
public DateTime CreatedOn {get; set;}
public TypeA A {get; set;}
public TypeB B {get; set;}
}
假设我们想要实例化ClassA类型的对象。然后我们应该向它的构造函数传递一个对象,它实现了接口IParameters。
由于这个事实,我们无法实例化一个接口,换句话说就是写 IParameters parameters = new {....};我们应该定义一个实现这个接口的类。由于此接口没有方法,并且它只具有属性,所有只实现此接口的类,并且它们不包含任何功能,因此将是所有这些属性的副本。
让classB实现IParameters:
public class classB : IParameters
{
public int Id {get; set;}
public string FirstName {get; set;}
public string LastName {get; set;}
public DateTime CreatedOn {get; set;}
public TypeA A {get; set;}
public TypeB B {get; set;}
}
然后,如果我们想要实例化一个classA类型的对象,我们应该首先实例化一个classB的对象,如下所示:
classB b = new classB(){ .... };
classA a = new classA(b);
我之所以如此认为是在另一个类中我必须创建一个classA对象的事实。不幸的是,classA有大量代码需要重构。它使用的一些类型,应该通过它的构造函数创建它们,它的构造函数太多了。因此,我想到的其中一件事就是将课程的所有这些参数都带到了它之外。然后我虽然最好将它的conructor传递给一个实现特定接口而不是具体类型的类型,因为它可能在将来发生变化。
我想知道以上的配件是否值得。
提前感谢您的帮助。
答案 0 :(得分:1)
是的,您实施dependency injection
,模式为SOLID.
link:http://en.wikipedia.org/wiki/SOLID_(object-oriented_design)
此概念可帮助您定义unit test easily
,从而在界面上创建存根或模拟。
为了将来你也可以定义container Unity
来初始化这些对象。
对我有好处