.NET实体框架项目布局(架构)

bug*_*ixr 12 c# architecture asp.net entity-framework web-architecture

我正在尝试确定如何最好地构建.NET实体框架项目以实现一个很好的分层方法.到目前为止,我已经在基于浏览的游戏中尝试过,玩家拥有并操作行星.这是我如何得到它:

网站

这包含所有前端.

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应该只需要引用Business项目.

另外,我发现我的经理类往往变得非常沉重.我最终会得到几十种静态方法.

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

编辑

经过一些更多,还有额外的项目困扰我.例如,假设我有我的Planet对象,它再次从向导生成代码.如果时间到来我的星球需要有一个专门的属性,比如说"人口",这是基于Planet对象的其他属性的某种计算.我是否想要创建一个继承自Planet的新类,然后返回它?(嗯,我想知道这些课程是否被EF密封?)

谢谢

fle*_*esh 3

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

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

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

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

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