c# - .NET Entity Framework 项目布局(架构)

标签 c# asp.net entity-framework architecture web-architecture

我正在尝试确定如何最好地构建 .NET Entity Framework 项目以实现良好的分层方法。到目前为止,我已经在玩家拥有和经营行星的基于浏览的游戏中进行了尝试。这是我得到它的方法:

网站

这包含了所有的前端。

C# 项目 - MLS.Game.Data

这包含带有我所有数据映射的 EDMX 文件。这里没有其他内容。

C# 项目 - MLS.Game.Business

这包含各种我称为“管理器”的类,例如 PlanetManager.cs。星球管理器有各种用于与星球交互的静态方法,例如 getPlanet(int planetID),它将返回从 MLS.Game.Data 生成的代码对象。

在网站上,我会做这样的事情:

var planet = PlanetManager.getPlanet(1);

它从 MLS.Game.Data(从 EDMX 生成)返回一个 Planet 对象。它有效,但它在一定程度上困扰着我,因为这意味着我的前端必须引用 MLS.Game.Data。我一直觉得 GUI 应该只需要引用业务项目。

此外,我发现我的 Manager 类往往会变得非常繁重。我最终会在其中包含许多静态方法。

所以...我的问题是 - 其他人如何布局他们的 ASP EF 项目?

编辑

不过,再过一些之后,还有一些困扰我的其他项目。例如,假设我有我的 Planet 对象,它也是从向导生成的代码。如果有一天我的星球需要有一个专门的属性,比如“人口”,它是基于星球对象的其他属性的某种计算。我是否想创建一个继承自 Planet 的新类,然后返回它? (嗯,我想知道这些类是否被 EF 密封了?)

谢谢

最佳答案

您可以尝试以下方法来改进:

  • 使用 EF 在您的数据层中获取 DTO,然后使用这些 DTO 在您的业务层中填充更丰富的业务对象。然后您的 UI 才需要引用业务层。
  • 一旦您创建了丰富的业务对象,您就可以开始从管理器类中内化一些逻辑,从而有效地清理业务层。

我个人更喜欢更丰富的模型而不是管理器模型,因为正如您所说,您最终会遇到大量静态方法,您不可避免地会在其他静态方法中链接在一起。我发现这太困惑了,更重要的是,更难理解和保证对象在任何给定时间点的一致性。

如果将逻辑封装在类本身中,则无论外部调用者的性质如何,都可以更加确定对象的状态。

顺便说一句,这是个好问题。

关于c# - .NET Entity Framework 项目布局(架构),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/549086/

相关文章:

c# - 如何防止 'System.FormatException' 出现在带有空文本框的 mscorlib.dll 中?

c# - 在 xml 中创建自己的设置

c# - 使用 ASP.NET MVC 的 ViewBag foreach 循环中图像滑动不起作用

c# - 可选属性中的 MVC 必需属性

entity-framework - ReferentialConstraint 中的依赖属性映射到一对一关系上存储生成的列错误

entity-framework - Entity Framework (v6)在异常后关闭连接而不使用 using 语句?里面的实验结果

c# - Entity Framework - SQL 查询 - 限制和排序依据 - SQL Server

java - 如何在Java和C#中获取定义的元素之前和之后的所有元素

c# - 运行时更改sqldatasource的select命令

c# - 访问不同命名空间中的枚举