实体框架实体(连同框架)是您的数据层。在许多应用程序中,它们也成为您的业务层的一部分——这是否好是有争议的(我个人不喜欢这样,但是当你用存储库模型抽象它时,有一个很好的论点是你正在输EF 提供的一些好处)。
根据您分离代码的方式(听起来您正在使用存储库模式),您可能有一个包含一些业务逻辑的存储库,或者也有一个服务层(我更喜欢 3 层应用程序),其中业务逻辑(主要是) 发生。
我认为你应该考虑视图模型以及你的演示模型的一部分——但是如果你使用 MVC 和数据注释(这对于这项工作来说非常好)来验证你的模型,你只是堆积了一堆业务逻辑进入他们。
防止业务逻辑潜入的最重要的地方是您的表示层,最重要的是您的视图和控制器。构建应用程序其余部分的方法在很大程度上取决于您选择的框架、应用程序的规模和应用程序的部署结构。
所以要尽可能清楚,这就是我所做的*:
视图 <--仅表示层
控制器 <--仅表示层(在某些情况下可能会以稍微“胖”的控制器告终,例如 .NET 会员登录)
View Models <--Presentation 层,但如果在这里进行验证,业务规则也经常被测试。
服务层 <--如果使用业务层
Repositories <--可能只是数据层,或者业务层的混合。如果您使用存储库模式,请尝试避免直接公开您的 DbSet,因为这会立即破坏您尝试提供的抽象(可能的例外情况,例如 - .Net Membership)
实体 <--数据层,可能还带有业务逻辑,具体取决于您构建应用程序的方式。
*不作为权威