我正在开发一个带有angular + net core 2.1和entity framework core的项目。
在我的后端,我具有以下结构:
FooController-> FooService-> FooRepository-> FooEFContext
控制器仅将请求路由到正确的服务。
服务了解事物运作的业务逻辑。
存储库抽象EF。
EFContexts访问数据。
现在,假设我有两个这样的实体:
雇员n ... 1公司(其中一家公司可能有n名雇员,而一个雇员最多只有1家公司)
现在想象一下我正要更新特定员工的公司数据的时候:
public void Post([FromBody]Company newData) {
var user = _userService.GetUser( // id of current logged user );
...
// Get the company associated with the user
...
_companyService.Update(company)
}
我应该如何获得公司?我有两种选择:
_userService.GetUser(..)返回带有相关实体(公司,位置,..其他)的所有详细信息的用户
_userService.GetUser(..)仅返回用户信息,不包括所有详细信息,然后调用:
_companyService.GetCompany( user.companyId)
在第一种情况下,我可能必须在服务中使用2种不同的方法:一种仅获取用户数据,而另一种获取用户数据以及所有关联实体的所有详细信息。
在第二种情况下,我对数据库进行了两次往返,但是我对每个服务都保留了更严格的“单一责任”概念。
您认为哪种方法更好?有什么我想念的吗?
非常感谢您:)
答案 0 :(得分:0)
在这种情况下,我也曾多次质疑自己,但我真的认为,只有一心一意使事情变得渺小是可行的(因此,第二种选择)。您指出不利的一面是更多的DB调用(需要注意),但是在这种情况下,我认为额外的调用并不能保证将所有关联的实体一起返回。