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密封?)
谢谢
您可以尝试以下方法来改进:
与管理器模型相比,我个人更喜欢更丰富的模型,因为正如您所说,您最终会得到大量静态方法,这些静态方法不可避免地会在其他静态方法中链接在一起。我发现这太混乱了,更重要的是,很难理解和保证对象在任何给定时间点的一致性。
如果将逻辑封装在类本身中,则无论外部调用者的性质如何,您都可以更加确定对象的状态。
顺便说一句,这是个好问题。