【问题标题】:Implementing Interface in MVVMMVVM中的实现接口
【发布时间】:2014-08-28 06:07:34
【问题描述】:

我是 MVVM 的新手,请见谅。我需要创建一个关于员工工资单的演示项目(仅供我练习)。我需要有一个实现 IEmployee 接口和 ISalary 接口的 Employee 模型。我的问题是 IEmployee 和 ISalary 接口应该在哪里?因为我看到很多例子都使用直接类本身而不是使用接口,所以我对使用接口感到困惑。我应该在哪里放置我的以下接口,或者在我有 Employee 类的 Model 中,或者我应该有一些接口文件夹并将我的所有接口都放在那里。

客户;

public interface IEmployee
{
    string EmployeeName { get; set; }
    string Department { get; set; }
    string Contact { get; set; }
}

工资详情

public interface ISalaryDetails
{
    int Salary { get; set; }
    int Month { get; set; }
}

员工

 public class Employee : IEmployee, ISalaryDetails
{

    public string EmployeeName
    {
        get
        {
            throw new NotImplementedException();
        }
        set
        {
            throw new NotImplementedException();
        }
    }

    public string Department
    {
        get
        {
            throw new NotImplementedException();
        }
        set
        {
            throw new NotImplementedException();
        }
    }

    public string Contact
    {
        get
        {
            throw new NotImplementedException();
        }
        set
        {
            throw new NotImplementedException();
        }
    }

    public int Salary
    {
        get
        {
            throw new NotImplementedException();
        }
        set
        {
            throw new NotImplementedException();
        }
    }

    public int Month
    {
        get
        {
            throw new NotImplementedException();
        }
        set
        {
            throw new NotImplementedException();
        }
    }
}

【问题讨论】:

  • 那些看起来很奇怪的界面......无论如何,我不明白你在问什么。你有什么困惑?如果只是将它们放在您的项目中,那完全取决于您,这个问题应该基于意见关闭。
  • 接口是关于合约的。如果必须实现接口定义的方法,则可以在类中继承接口,仅此而已。例如,在您的情况下,您可能有一个从 ISalaryDetails 但不是从 IEmployee 继承的类“Boss”(即使您定义的成员多于方法,这不是接口的重点)。最后,您的问题显然与 wpf 或 mvvm 无关,如果您考虑一下,也与 c# 和 .net 无关。
  • 可能是我不够清楚。正如我所说,我对 MVVM 完全陌生,我会用 MVVM 搞乱正常项目,对此我感到抱歉。希望你们是这方面的专家。所以让我知道在 MVVM 和我的项目中放置接口的位置。正如下面的答案所说,看起来我也必须考虑单元测试项目。好的,无论如何我的问题是我的项目中应该在哪里使用我的接口。在模型文件夹或视图模型文件夹中希望现在很清楚。

标签: c# .net wpf mvvm


【解决方案1】:

我会将 Department、Contact 等移动到单独的类中——它们实际上并不是员工的一部分,应该有自己的逻辑——因此它们是自己的类。 此外,您可能需要为不同的人提供不同级别的薪水,例如按小时计酬的顾问或固定工资的人等。pp。

您的班级可能如下所示:

public class Employee : IEmployee
{

    public string EmployeeName
    {
        get
        {
            throw new NotImplementedException();
        }
        set
        {
            throw new NotImplementedException();
        }
    }

public ISalary Salary{get; set;}
}

public class Salary: ISalary
{
  public int Money{get; set;}
}

public class BigBucksSalary: ISalary
{
  public int Money{get; set;}
}

接口是双重的好处:首先,您可以动态更改行为,例如当你需要不同类型的薪水时。第二:如果你想对某些东西进行单元测试,模拟一个接口比模拟一个原始类要容易得多。

【讨论】:

    【解决方案2】:

    在大型 WPF 应用程序中,通常会在几个不同的项目中找到接口类。您肯定会在您显示的类型的数据模型项目中找到一些,所以简而言之,回答您的问题......它们通常应该放在您的数据模型类库项目中名为 Interfaces 的文件夹中。

    但是,为了更详细地回答,在大型 WPF 应用程序中查找服务类也是习惯性的。这些负责为视图模型提供某些功能。例如,我有一个 WindowManager 类,它负责打开对话框等。

    现在,当我测试一个弹出确认对话框的视图模型时,如果没有用户点击 Ok 会破坏我的测试。所以我必须在测试时使用MockWindowManager 类。因此,我必须有一个IWindowManager 接口才能使这一切成为可能。现在这个接口和服务类一起在服务项目中,但是在一个名为Interfaces的文件夹中。

    还有其他地方我们也可以使用接口,但关键是您将接口存储在最有意义的地方......它们最常使用的地方,靠近它们的实现类。不过要明确一点……这与 MVVM 无关,它更像是一般的经验法则。

    您还可以查看我对 Project structure for MVVM in WPF 问题的回答,了解典型的 MVVM 项目结构,其中显示了我所指的大量 Interfaces 文件夹。

    【讨论】:

      猜你喜欢
      • 2010-10-03
      • 1970-01-01
      • 2017-06-08
      • 1970-01-01
      • 2011-10-18
      • 1970-01-01
      • 2015-06-07
      • 1970-01-01
      • 2012-07-12
      相关资源
      最近更新 更多