如何对上层隐藏下层,同时让它们能够传递数据?
How to hide lower tiers from the upper ones yet make them able to pass data?
我正在用 C# 做一个家庭项目。我的项目包括 EF。它有一个数据库,一个 EF 自动生成的实体 class 库,其中包含所有模型 classes,一个存储层和一个表示层。我希望表示层独立于数据层。我想我做了另一个包含实体接口的层,所以在上层我可以只引用接口层并且仍然能够传递数据,而不会意外修改数据或依赖于数据。然而,这不起作用,因为模型生成器 class 抛出属性未映射的异常。我现在很困惑。我怎么能做到这一点?有什么我应该考虑的设计模式吗?
谢谢。
实体 classes 是作为部分 classes 生成的,因此您可以使用其他成员(如方法、字段等)扩展这些 classes。我会做的是在实现所需接口的存储库项目中添加另一个部分 class。该接口将在您的接口项目中定义。这样你就可以 return 从存储库接口而不是特定的 class.
在您的存储库中,这是自动生成的数据模型
public partial class EntityClass
{
public int MyProperty { get; set; }
public string String { get; set; }
public bool Boolean { get; set; }
}
然后在同一个项目中定义同名的部分class。请记住在此处保留与原始自动生成模型完全相同的命名空间!
public partial class EntityClass : IEntityClass
{
public int AnotherOne { get; set; }
}
在你的界面项目中你可以添加这样的东西
public interface IEntityClass
{
int MyProperty { get; set; }
string String { get; set; }
bool Boolean { get; set; }
int AnotherOne { get; set; }
}
请记住,这是一种非常麻烦的方法,因为您必须记住在更改数据模型时更新界面。另一种常用的方法是定义 DTO(数据传输对象)。
Here 有人问过类似的问题。请阅读此内容。
我正在用 C# 做一个家庭项目。我的项目包括 EF。它有一个数据库,一个 EF 自动生成的实体 class 库,其中包含所有模型 classes,一个存储层和一个表示层。我希望表示层独立于数据层。我想我做了另一个包含实体接口的层,所以在上层我可以只引用接口层并且仍然能够传递数据,而不会意外修改数据或依赖于数据。然而,这不起作用,因为模型生成器 class 抛出属性未映射的异常。我现在很困惑。我怎么能做到这一点?有什么我应该考虑的设计模式吗?
谢谢。
实体 classes 是作为部分 classes 生成的,因此您可以使用其他成员(如方法、字段等)扩展这些 classes。我会做的是在实现所需接口的存储库项目中添加另一个部分 class。该接口将在您的接口项目中定义。这样你就可以 return 从存储库接口而不是特定的 class.
在您的存储库中,这是自动生成的数据模型
public partial class EntityClass
{
public int MyProperty { get; set; }
public string String { get; set; }
public bool Boolean { get; set; }
}
然后在同一个项目中定义同名的部分class。请记住在此处保留与原始自动生成模型完全相同的命名空间!
public partial class EntityClass : IEntityClass
{
public int AnotherOne { get; set; }
}
在你的界面项目中你可以添加这样的东西
public interface IEntityClass
{
int MyProperty { get; set; }
string String { get; set; }
bool Boolean { get; set; }
int AnotherOne { get; set; }
}
请记住,这是一种非常麻烦的方法,因为您必须记住在更改数据模型时更新界面。另一种常用的方法是定义 DTO(数据传输对象)。
Here 有人问过类似的问题。请阅读此内容。