我正试图使用接口来提高我的生产力和可扩展性。它们非常强大,但我的理解和实现都遇到了困难。
假设,如果我有一个无法控制的用户界面,但我正在编写一个类库,它将执行一系列逻辑。我最初的想法是这样的:
public interface ISiteForm
{
public string FirstName { get; set; }
public string LastName { get; set; }
// Also any other User Interface Form Fields.
}它会像这样布局,这样用户界面就可以实现和引用它。
public class SiteForm : ISiteForm
{
public SiteForm()
{
FormPass();
}
public string FirstName
{
get { return firstName; }
set { firstName = value; }
}
public string LastName
{
get { return lastName; }
set { lastName = value; }
}
private string lastName,
private string firstName,
public void FormPass(string _lastName, string _firstName)
{
// Implementation to assign a value from User Interface into the interface.
lastName = _lastName;
firstName = _firstName;
}
}我的想法是,当类库被引用时,它们会在调用时将这些参数传递给方法。然后,在创建类时,自然地将这些变量分配给接口。
因此,如果我有项目的任何其他部分需要这些相同的变量;我可以简单地调用接口并调整setter值。
我担心的是:
这是否是通过接口传递参数的错误方法,以便这些相同的变量可以在其他地方使用?
发布于 2013-03-06 17:08:14
您不向接口分配任何东西,这是一个实现契约。实现类包含所有逻辑。
如果您想使用相同的接口和变量,您可能需要查看类似于依赖注入和控制反转之类的内容。
发布于 2013-03-06 17:08:43
接口只适用于多态。你根本不应该把任何逻辑都放进去。
发布于 2013-03-06 22:06:05
根据这些建议,我重新讨论了解决办法。这就是我最后处理它的方式,我使用了依赖注入:接口注入方法。这种方法提供了我所需的解耦方法;同时仍然保持了功能的目标。
我创建了以下内容:
public interface ISiteForm
{
string GetSiteValues(string FirstName, string LastName);
}这个特定的接口将充当我们的依赖项或IDependency。然后我创建了下面的Class。
public class SiteForm : ISiteForm
{
// Leave for now.
}现在,我们已经预先配置了我们的Interface和Class。这将成为我们的依赖。
现在来安装我们的注射器。
public interface ISiteFormInjector
{
void InjectSiteForm(ISiteForm siteDetails);
}我们的注射器将是我们的依赖,或在我们的情况下IDependent。现在我们需要更新我们的代码,这样数据注入就可以物理地实现了。
public class SiteContent : ISiteFormInjector
{
// Call our Dependency.
ISiteForm _siteDetails;
public void InjectSiteForm(ISiteForm siteDetails)
{
_siteDetails = siteDetails;
}
// Properties to Associate our Value.
public string FirstName { get; set; }
public string LastName { get; set; }
public string GetSiteValues()
{
return _siteDetails.GetSiteValues(FirstName, LastName);
}
}现在可以注入这些值了;很明显,通过一些重构,它将能够将值注入,然后将这些变量传递给应用程序的其他方面。它遵循这种布局形式:

https://stackoverflow.com/questions/15253525
复制相似问题