我一直在研究NerdDinner教程,其中的大部分内容都很有意义。我不确定的是为什么直接在Controller中而不是Model对象中使用Repository。例如,如果我们要实现自己的成员资格系统,并且它具有一个带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对象,例如
NerdDinnner风格:
1登录请求进来
2 AccountController使用AccountRepository根据请求获取登录详细信息
3 AccountController使用Account对象并从步骤1传入信息
4帐户对象处理请求并通知AccountController
我的建议是:
1登录请求进来
2 AccountController使用Account对象根据请求处理登录
3 Account对象使用AccountRepository获取登录详细信息
4帐户对象处理请求并通知AccountController
后一种样式的原因是,从AccountRepository返回登录详细信息后,将遵循一些业务规则,例如是帐户锁定,帐户验证等。如果使用第一种样式,则获取详细信息然后使用它们的逻辑分为两个步骤。后一种样式将所有逻辑保持在一起,同时仍使用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中的模型视为控制器用来馈送视图引擎的数据传输对象。
控制器是与服务层连接的唯一参与者。