Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.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/4/oop/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
Php 什么是域对象及其用途是什么?_Php_Oop_Model View Controller - Fatal编程技术网

Php 什么是域对象及其用途是什么?

Php 什么是域对象及其用途是什么?,php,oop,model-view-controller,Php,Oop,Model View Controller,我最近开始学习OOP和MVC,但我已经有很多问题了!:) 我想澄清一下这个网站上的列表 识别哪些[它们的]引用表示聚合,哪些表示关联 抄袭 维护业务逻辑 将其自身与相同类型的其他域对象进行比较 方便选择打印或显示它们的其他对象 对其域信息进行测试” 表明自己的身份 证实自己 1:它们是指返回其他域对象ID的方法列表吗 7和8:他们说的“识别和验证自己”是什么意思?既然识别和验证可能需要访问持久层,那么这应该如何工作 在过去的几个月里,我读了很多书,但实际上我不能说我对OOP/MVC有很好的理解:

我最近开始学习OOP和MVC,但我已经有很多问题了!:)

我想澄清一下这个网站上的列表

  • 识别哪些[它们的]引用表示聚合,哪些表示关联
  • 抄袭
  • 维护业务逻辑
  • 将其自身与相同类型的其他域对象进行比较
  • 方便选择打印或显示它们的其他对象
  • 对其域信息进行测试”
  • 表明自己的身份
  • 证实自己
  • 1:它们是指返回其他域对象ID的方法列表吗

    7和8:他们说的“识别和验证自己”是什么意思?既然识别和验证可能需要访问持久层,那么这应该如何工作

    在过去的几个月里,我读了很多书,但实际上我不能说我对OOP/MVC有很好的理解:(

    什么是验证?为什么我需要它?它应该如何执行?如果数据来自数据库,为什么我需要验证,因为持久数据已经有效

    凭借自己的洞察力,我为我拥有的每个模型实体创建了这组类:

    // it holds Student information, it can also contain partial data
    // (for updating just certain fields in the database)
    interface Student
    {
        getID($id)
        setID($id)
        getName()
        setName($name)
        getSurname()
        setSurname($surname)
    }
    
    interface StudentValidator
    {
        validateInsert(Student $data)
        validateDelete(Student $data)
        validateUpdate(Student $data)
    }
    
    interface StudentMapper
    {
        getByID($id)
        getAllByClassroomID($crid)
        updateByID(StudentValidator $v, int $id, Student $data)
        deleteByID(StudentValidator $v, int $id)
        deleteAllByClassroomID(StudentValidator $v, int $crid)
        insert(StudentValidator $v, Student $data)
    }
    
    这离像样的代码还有多远?:)

    提前感谢!!!

    验证和资料 域对象内的验证将仅限于它所包含的业务规则。例如,当调用
    $student->isValid()
    时,域对象将查看名称和姓氏是否已设置,以及它们是否在奇怪的位置包含数字(如“Frederick William III”)“是完全有效的,但不太可能的名称)

    这不包括数据完整性检查(如检查学生的电子邮件地址是否尚未注册,从而违反
    唯一性
    约束)。数据完整性由映射器进行验证。如果您使用PDO进行持久性抽象,那么在出现完整性错误的情况下,它将抛出一个异常,您可以在映射器中内部处理该异常,并在您试图存储的域对象上设置一个错误状态

    自我认同 “自我识别”是一种模糊的描述。我假设它会引用比较对象的操作(比如:
    $studentA====$studentB
    来验证它是否是同一个学生)

    参考物 识别哪些[它们的]引用表示聚合,哪些表示关联

    本节讨论域对象之间的交互。比如调用
    $course->addStudent($student)
    将定义
    课程
    学生
    实例之间的某种关系。我对UML的前端有点生疏,但我认为这表明:

    • 这门课程包含学生的集合
    • 学生与课程关联
    一个简化的、有点笨拙的例子,说明了您遇到的所有问题,可能如下所示:

    $student = new Student;
    $studentMapper = new StudentMapper($pdo);
    
    $student->setId(42);
    
    if (!$studentMapper->fetch($student)) { 
       // error , missing student
       return;
    }
    
    // found the one with ID 42
    $course = new Course;
    $courseMapper = new CourseMapper($pdo);
    
    $course->setId(31);
    
    if (!courseMapper->fetch($course)) {
       // missing course
       return;
    }
    
    $course->addStudent($student);
    
    if ($course->isValid() && $student->isValid()) {
       // check if there are free spots in course 
       // and student has prerequisites
       $courseMapper->store($course);
       $studentMapper->store($student);
    }
    
    当地图绘制者试图存储数据时,将检查是否存在课程学生双重预订

    注意:您还可能会注意到,这听起来像是一个交易案例。这就是为什么在大规模OOP代码库中使用它很常见的原因之一

    注2:请记住,“域对象”和“域对象集合”是两个独立的东西。这些实体的持久性也是如此。有点像以前的帖子里描述的

    验证与材料 域对象内的验证将仅限于它包含的业务规则。例如,当调用
    $student->isValid()
    时,域对象将查看名称和姓氏是否已设置,以及它们是否在奇怪的地方包含数字(例如,“Frederick William III”完全有效,但名称不可能)

    这不包括数据完整性检查(如检查学生的电子邮件地址是否尚未注册,从而违反
    唯一性
    约束)。数据完整性由映射器进行验证。如果您使用PDO进行持久性抽象,那么在出现完整性错误的情况下,它将抛出一个异常,您可以在映射器中内部处理该异常,并在您试图存储的域对象上设置一个错误状态

    自我认同 “自我识别”是一种模糊的描述。我假设它会引用比较对象的操作(比如:
    $studentA====$studentB
    来验证它是否是同一个学生)

    参考物 识别哪些[它们的]引用表示聚合,哪些表示关联

    本节讨论域对象之间的交互。比如调用
    $course->addStudent($student)
    将定义
    课程
    学生
    实例之间的某种关系。我对UML的前端有点生疏,但我认为这表明:

    • 这门课程包含学生的集合
    • 学生与课程关联
    一个简化的、有点笨拙的例子,说明了您遇到的所有问题,可能如下所示:

    $student = new Student;
    $studentMapper = new StudentMapper($pdo);
    
    $student->setId(42);
    
    if (!$studentMapper->fetch($student)) { 
       // error , missing student
       return;
    }
    
    // found the one with ID 42
    $course = new Course;
    $courseMapper = new CourseMapper($pdo);
    
    $course->setId(31);
    
    if (!courseMapper->fetch($course)) {
       // missing course
       return;
    }
    
    $course->addStudent($student);
    
    if ($course->isValid() && $student->isValid()) {
       // check if there are free spots in course 
       // and student has prerequisites
       $courseMapper->store($course);
       $studentMapper->store($student);
    }
    
    当地图绘制者试图存储数据时,将检查是否存在课程学生双重预订

    注意:您还可能会注意到,这听起来像是一个交易案例。这就是为什么在大规模OOP代码库中使用它很常见的原因之一

    注2:请记住,“域对象”和“域对象集合”是两个独立的东西。这些实体的持久性也是如此。有点像以前的帖子里描述的


    谢谢你的回答!!那就更好了