首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >界面误解

界面误解
EN

Stack Overflow用户
提问于 2013-03-06 17:03:13
回答 3查看 456关注 0票数 1

我正试图使用接口来提高我的生产力和可扩展性。它们非常强大,但我的理解和实现都遇到了困难。

假设,如果我有一个无法控制的用户界面,但我正在编写一个类库,它将执行一系列逻辑。我最初的想法是这样的:

代码语言:javascript
复制
public interface ISiteForm
{
     public string FirstName { get; set; }
     public string LastName { get; set; }

     // Also any other User Interface Form Fields.
}

它会像这样布局,这样用户界面就可以实现和引用它。

代码语言:javascript
复制
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值。

我担心的是:

  • 接口本质上不需要逻辑
  • 它们通常是多态的,这将失去特定的实现。

这是否是通过接口传递参数的错误方法,以便这些相同的变量可以在其他地方使用?

EN

回答 3

Stack Overflow用户

发布于 2013-03-06 17:08:14

您不向接口分配任何东西,这是一个实现契约。实现类包含所有逻辑。

如果您想使用相同的接口和变量,您可能需要查看类似于依赖注入和控制反转之类的内容。

票数 1
EN

Stack Overflow用户

发布于 2013-03-06 17:08:43

接口只适用于多态。你根本不应该把任何逻辑都放进去。

票数 1
EN

Stack Overflow用户

发布于 2013-03-06 22:06:05

根据这些建议,我重新讨论了解决办法。这就是我最后处理它的方式,我使用了依赖注入:接口注入方法。这种方法提供了我所需的解耦方法;同时仍然保持了功能的目标。

我创建了以下内容:

代码语言:javascript
复制
public interface ISiteForm
{
     string GetSiteValues(string FirstName, string LastName);
}

这个特定的接口将充当我们的依赖项或IDependency。然后我创建了下面的Class

代码语言:javascript
复制
public class SiteForm : ISiteForm
{
    // Leave for now.
}

现在,我们已经预先配置了我们的InterfaceClass。这将成为我们的依赖。

现在来安装我们的注射器。

代码语言:javascript
复制
public interface ISiteFormInjector
{
    void InjectSiteForm(ISiteForm siteDetails);
}

我们的注射器将是我们的依赖,或在我们的情况下IDependent。现在我们需要更新我们的代码,这样数据注入就可以物理地实现了。

代码语言:javascript
复制
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);
    }
}

现在可以注入这些值了;很明显,通过一些重构,它将能够将值注入,然后将这些变量传递给应用程序的其他方面。它遵循这种布局形式:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15253525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档