gpt4 book ai didi

asp.net-mvc - Controller 或模型中的存储库?

转载 作者:行者123 更新时间:2023-12-04 17:59:46 27 4
gpt4 key购买 nike

我一直在学习 NerdDinner 教程,其中大部分内容都说得通。我不确定的是为什么在 Controller 中直接使用存储库而不是模型对象。例如,如果我们想实现我们自己的成员(member)系统并且它有一个带有 Login 方法的 AccountController,那么连接它的最佳解决方案是什么?例如

Login(username,password){

repo = AccountRepository

account = repo.getLogin(username,password)

//check account isn't locked

//check account has been verified etc etc

//throw error or proceed to secure area

}

或者
Login(username,password){

repo = AccountRepository

account = repo.getLogin(username,password)

account.login() //business logic is handled in Account (Model)

}

或者
Login(username,password){

//no reference to repository

account = Account

//Account (Model) uses repository and handles business logic
account.login(username,password)

}

我建议让 Account 对象直接使用 AccountRepository,而不是 AccountController 从 AccountRepository 获取信息,然后将其传递给 Account 对象,例如

Nerd 晚餐风格:

1 登录请求进来
2 AccountController 使用 AccountRepository 根据请求获取登录详细信息
3 AccountController 使用 Account 对象并传入步骤 1 中的信息
4 Account对象处理请求并通知AccountController

我的建议是:

1 登录请求进来
2 AccountController 使用 Account 对象根据请求处理登录
3 Account 对象使用 AccountRepository 获取登录详细信息
4 Account对象处理请求并通知AccountController

后一种风格的原因是,从 AccountRepository 返回登录详细信息后,将遵循业务规则,例如帐户被锁定,帐户验证等如果使用第一种样式,则获取详细信息的逻辑然后使用它们分为 2 个步骤。后一种风格将所有逻辑保持在一起,同时仍然使用 AccountRepository,例如
Account.Login(username,password){
repo = AccountRepository

account = repo.GetLogin(username,password)

//check account isn't locked

//check account has been verified etc etc

//throw error or proceed to secure area
}

我希望这是有道理的。

最佳答案

mvc 中的“模型”是表示模型而不是域模型。您可以将 MVC 中的模型视为 Controller 用于为 View 引擎提供数据的数据传输对象。
Controller 是唯一与服务层连接的角色。

关于asp.net-mvc - Controller 或模型中的存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/871044/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com