c# - 为什么在面向对象设计中某些模式的类具有单独的数据类

标签 c# asp.net-mvc oop class

我刚刚阅读了一些旧的面向对象设计书籍,以及一些我不太了解的内容。

如果我使用类似存储库模式的东西,可以说。

即:

    interface ICarRepository {

      IEnumerable<car> GetCarCollection();

    }

    class MsSqlCarRepository : ICarRepository {

      IEnumerable<car> GetCarcollection(){ ................ };

    }

    class car {

      int CarId;
      string CarName;

    }

上面的代码大致是 C#,但并不真正相关。

虽然上面的方法效果很好,并且是我自己经常看到和使用的,但我读过的所有关于 oo 的书籍通常都指出对象将其方法和属性组合在一起。

所以忽略界面部分不应该更符合以下内容:

    class car {

      int CarId;
      string CarName;

      IEnumerable<car> GetCarcollection(){ ................ };

    }

???

最佳答案

这都是关于代码不同部分的层之间的耦合。将域模型与可以在这些域模型上执行的操作/契约分开,可以让您在其他上下文中更轻松地重用这些域模型。例如,假设有人想要使用此 Car 模型定义除 GetCarcollection 之外的其他操作。在这种情况下,他将编写一个不同的存储库接口(interface),并且您不需要修改此域模型。另一方面,如果您在 Car 对象内定义了 GetCarcollection 方法,则模型的其他使用者将不高兴,因为他可能不关心您的方法,但想使用自己的方法。

关于c# - 为什么在面向对象设计中某些模式的类具有单独的数据类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7423689/

相关文章:

c# - MultiBinding 与多个输出

asp.net-mvc - Razor 中的 ViewBag.Title 是什么?

.net - 我可以在 ASP.NET MVC 中的哪里放置自定义类?

java - 如果我将一个子类转换为它的父类(super class),并调用一个在子类中被覆盖的方法,它会执行被覆盖的方法还是原始方法?

c# - 具有泛型返回类型的泛型类和方法的委托(delegate)

c# - Entity Framework 上下文基础选项的定义

c# - 在 C# 中从 Outlook 发送电子邮件

ASP.NET MVC 5 - 默认身份用户 CRUD

c# - 更改枚举显示

python - 实现所需的类层次结构行为的最佳方法