Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Model view controller MVC设计模式模型逻辑_Model View Controller_Design Patterns_Confirmation Email - Fatal编程技术网

Model view controller MVC设计模式模型逻辑

Model view controller MVC设计模式模型逻辑,model-view-controller,design-patterns,confirmation-email,Model View Controller,Design Patterns,Confirmation Email,根据MVC设计模式,如果我们创建一个用户(数据库工作),并且我们必须向用户发送一封带有激活码的邮件,那么在模型创建数据库记录之后,这适合模型还是控制器?MVC模式用于创建业务逻辑(模型)和GUI之间的抽象(视图)。控制器只是这两个块之间的适配器(google适配器模式) 因此,控制器应仅具有用于从控制器获取所需信息的代码,并采用该代码以使其适合视图。任何其他逻辑都应位于模型中 只有当您理解模型不是单个类而是所有业务逻辑时,这才有意义 示例(具体实现,但我希望您理解): 控制器是一个简化消息并将消

根据MVC设计模式,如果我们创建一个用户(数据库工作),并且我们必须向用户发送一封带有激活码的邮件,那么在模型创建数据库记录之后,这适合模型还是控制器?

MVC模式用于创建业务逻辑(模型)和GUI之间的抽象(视图)。控制器只是这两个块之间的适配器(google适配器模式)

因此,控制器应仅具有用于从控制器获取所需信息的代码,并采用该代码以使其适合视图。任何其他逻辑都应位于模型中

只有当您理解模型不是单个类而是所有业务逻辑时,这才有意义

示例(具体实现,但我希望您理解):


控制器是一个简化消息并将消息委托给模型对象的对象


您将在模型中拥有一个接口对象(或边界对象),它表示两个系统(您的系统和电子邮件)之间的链接。类EmailClient。您的模型对象将在需要时与此对象协作。

MVC和MVC启发的设计模式由两层组成:

  • 表示层
  • 模型层
表示层由视图、控制器和(主要在面向web的解决方案中)模板组成。该层处理用户交互。它识别用户输入,生成响应并管理用户界面的其他方面。控制器基于用户交互更改模型层的状态

模型层处理域业务规则并与不同形式的存储交互。模型层与表示层一样,不是任何单个对象或类,而是一组具有不同职责的结构

在这种情况下,处理用户管理的服务可以使用不同的结构,既发送验证电子邮件,创建帐户,又存储新创建的用户

模型层中的服务起着屏障的作用,将表示层与业务逻辑隔离开来。它们处理和存储抽象(、等)之间的交互

太长,读不下去了
带有新创建用户激活码的电子邮件应该从模型层发送。

控制器应该发送电子邮件。这是错误的。控制器中不应该存在业务逻辑。不知道是谁投了反对票,但你对我的回答非常好。+1如果你说模型不应该发送电子邮件,你还不理解MVC电子邮件。该模型不是一个单独的类。该模型可以包含每个控制器操作的几个类。但是您通常创建一个
UserService
类,该类具有
Register
方法,该方法依次调用
UserRepository
EmailService
以执行所需的操作。@IonutFlaviusPogacian,因为您是PHP d伊夫洛普,请读一读。这可能会消除你的一些困惑。
public class UserController : Controller
{
    // notice that it's a view model and not a model
    public ActionResult Register(RegisterViewModel model)
    {
        UserService service;
        User user = service.Register(model.UserName);
        return View("Created");
    }
}

// this class is located in the "model"
public class UserService
{
   public User Register(string userName)
   {
       // another class in the "model"
       var repository = new UserRepository();
       var user = repository.Create(userName);

       // just another "model" class
       var emailService = new EmailService();
       emailService.SendActivationEmail(user.Email);

       return user;
   }
}