首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET MVC 5分层?

ASP.NET MVC 5分层?
EN

Stack Overflow用户
提问于 2015-09-10 13:09:33
回答 2查看 445关注 0票数 1

我正在用ASP.NET MVC 5、EF (5或6)、Oracle11g和Kendo开发一个应用程序。

现在,我想对应用程序进行分层(体系结构)。所以,请给我指导如何分层的项目和不同的方式分层的项目。

我读过关于通用存储库模式的文章,我有以下问题,

  1. 在我的情况下用好吗?
  2. 在视图中使用EF类好吗?或者使用Model类(而不是EF类)和Automapper来将EF类转换为模型类是好的吗?
  3. 使用Log4Net进行日志记录好吗?

或者还有什么其他的模式我们可以用吗?

对不起,这可能是个简单的问题,但我对分层(建筑师)项目还是新手。那么,请指导我如何分层的项目?

谢谢,

普拉卡什。

EN

回答 2

Stack Overflow用户

发布于 2015-09-10 13:17:32

  1. 可以使用存储库模式,但由于实体框架的DbSet类本身就是存储库,我看不到在存储库之上构建存储库的真正优势。
  2. 不,我不会在视图中使用EF类,因为大多数情况下,您并不像存储在DB中那样显示数据,所以我更喜欢为每个视图提供一个Model类,它只公开视图实际需要的属性。我将使用模型类,但不使用Automapper (例如,请参见https://stackoverflow.com/a/32459232/870604),因此基本上我将手动映射对象。我个人也不喜欢使用实体作为参数来调用我的业务层,我通常使用一个POCO,它只包含用户指定的属性。
  3. Log4net工作得很好。

因此,例如,要创建一个新用户,我将使用:

  • 一个业务方法UserEntity CreateUser(UserToCreate objectToCreate)UserEntity是您的实体,UserToCreate是一个POCO,它只公开创建新用户所需的属性。此方法将位于Business程序集中,并从控制器调用。
  • 模型对象调用UserCreateModel,由UserCreate视图和控制器使用
  • UserCreateModelUserToCreate之间的手动映射
  • UserToCreateUserEntity之间的手动映射
  • UserEntity将有其他属性不被用户创建使用/相关(并且您不希望通过CreateUser方法公开这些属性)
  • UserCreateModel可以具有与视图的设计方式完全相关的附加属性(例如:您将有两个Password属性,因此用户必须在Create视图中确认密码,但用户创建UserToCreate只需要一个Password属性)
票数 2
EN

Stack Overflow用户

发布于 2015-09-10 14:31:25

@ken2k基本上是四舍五入的,但我只想指出,虽然使用EF使用存储库模式是不可取的,但仍然抽象化您对实体框架的使用并不是个坏主意。我个人使用的是策略模式,其中创建的接口本质上保存了应用程序可以使用的Api,然后根据所处理的源类型(实体框架、Web API等)实现该接口的一个或多个实现。在您的应用程序中,您只需要引用接口,然后使用依赖项注入来替代适当的实现。这让你可以在以后的时候换掉“策略”。例如,如果您稍后发现自己想从EF切换到类似Dapper的东西,您只需要为Dapper创建一个新的实现,然后将它与DI容器交换。应用程序的其余部分没有一个更明智。

此外,我发现让我的实体实现各种接口是有益的,然后允许我在我的策略实现中创建通用方法,这些方法可以与类似类型的对象一起工作。例如,我可能有这样的东西:

代码语言:javascript
复制
public interface IPublishable
{
    PublishStatus Status { get; set; }
    DateTime? PublishDate { get; set; }
    DateTime? ExpireDate { get; set; }
}

然后,我可以实现这样的方法:

代码语言:javascript
复制
public IEnumerable<TEntity> GetPublished<TEntity>()
   where TEntity : IPublishable
{
    ...
}

在该方法中,我可以使用StatusPublishDateExpireDate自由查询实体,因为接口保证任何有资格使用该方法的类都具有这些属性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32502821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档