38
کارشناسی درس بهار۱۳۹۱-۹۲ وشگا دا ص ىؼتیشیف شىذسی م داوشکذتش کامپی قسمت۱۰ هیی Domain Logic ونت کامپانDoctrine

یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

درس کارشناسی ۹۲-۱۳۹۱بهار

ىؼتی صداوشگا ششیف

داوشکذ مىذسی کامپیتش

۱۰قسمت Doctrine کامپاننتو Domain Logic الیه ی

Page 2: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

Transaction Scriptمذل تشاکىش

2

function processRegister($name, $email) { checkForDuplicateName($name); insertIntoDatabase($name, $email); }

Page 3: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

Transaction Scriptمذل Row Data Gateway

Table Data Gateway Record Set

ي مؼایةمضایا

3

Row Person Gateway

$name $email Insert() update() delete() static find($id)

Table Person Gateway

find($id): RecordSet insert($name, $email) update($id, $name, $email) delete($id)

Page 4: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

Domain Modelمذل شیءگشا

Row Data Gatewayتفايت تا Data Mapper

اشیاء گشاف

4

Page 5: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

Domain Modelمذل

5

class RegisteredUser { public function __construct ($name, $email); public function save(); public function checkForDuplicate(); public static function loadByName($name); }

Page 6: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

Table Moduleمذل Record Setالگی

6

class RegisteredUsersTable { public function retrieveAll(); public function retrieveByName($name); public function saveAll($recordSet); }

Page 7: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

اوتخاب

7

Page 8: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

Data Mapper اشیاءمیان مىاتغ داد ي تثذیالت

Collections ا

يساثت

8

Page 9: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

Active Record Row ت مشا مىطق

اایجاد اص پاسخ دسیافتی اص پایگا داد ومو

ایجاد ومو جذیذ findتشای استاتیکمتذای

ت سيص سساوی ي رخیش یک ومو داد ایدستشسی ت

مشتط مىطق ای

9

Page 10: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

Unit of Work Concurrency/ مضماوی / مگامی

ششيع ي پایان

begin commit

rollback

10

Page 11: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

Identity Map تکشاسی اشیاء

Performance

Inconsistency/ واساصگاسی

Lazy Load Performance

مشتط ت م اشیاء

11

Page 12: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

DBAL اوتضاع اص پایگا داد

ORM Data Mapperیک

اتضاسای کمکی

Formا Validation

12

Page 13: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

پایگا داد تىظیمات

13

# app/config/config.yml

# app/config/parameters.yml

parameters:

database_driver: pdo_mysql

database_host: localhost

database_name: d3

database_user: root

database_password: ~

Page 14: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

ساخته پایگا داد

پایگا داد Character Setتىظیم

14

>php app/console

doctrine:database:create

Page 15: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

Entityساخته Doctrineتا کمک

ت صست دستی

15

php app/console

doctrine:generate:entity

--entity="CEBlogBundle:Post“

CEBlogBundle:Post

CE/BlogBundle/Entity/Post

Page 16: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

ي مشخصات فیلذ ا ymlوع تىظیمات

16

doctrine/Post.orm.yml

CE\BlogBundle\Entity\Post:

type: entity

table: post

fields:

id:

type: integer

id: true

generator:

strategy: AUTO

lifecycleCallbacks: { }

Page 17: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

ي مشخصات فیلذ ا annotationوع تىظیمات

17

use Doctrine\ORM\Mapping as ORM;

**/

* @ORM\Entity

* @ORM\Table(name="post")

/*

class Post {

**/

* @ORM\Id

* @ORM\Column(type="integer")

* @ORM\GeneratedValue(strategy="AUTO")

/*

protected $id;

**/

* @ORM\Column(type="string", length=100)

/*

protected $title;

Page 18: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

Entityتکمیل

اAccessorساخته

متذای اضافی ...مىطق ي

18

>php app/console

doctrine:generate:entities

CEBlogBundle

Page 19: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

Schemaساخته ت سيص سساوی دس پایگا داد

19

php app/console

doctrine:schema:update –force

CREATE TABLE Post (id INT

AUTO_INCREMENT NOT NULL,

title VARCHAR(255) NOT NULL,

…, PRIMARY KEY(id))

Page 20: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

جذیذ ي قشاس دادن دس پایگا داد شیءایجاد

20

$p = new Post();

$p->setTitle(‘Blog Post #1');

$em = $this->getDoctrine()-

>getManager();

$em->persist($p);

$em->flush();

Page 21: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

اشیاءرخیش شذ اشیاءدستشسی ت

21

$repo = $this->getDoctrine()->

getRepository(

‘CEBlogBundle:Post');

$repo->find($id);

$repo->findOneByTitle(‘Post 2');

$repo->findAll();

$repo->findOneBy(

[title' => ‘Post 2']);

Page 22: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

ت سيص سساوی ي حزف

22

$p->setTitle(‘Changed Title!');

$em->flush();

$em->remove($p);

$em->flush();

Page 23: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

DQL SQLشثی

Domain Modelتش اساس مذل

23

$em = $this->getDoctrine()->getManager();

$query = $em->createQuery(

'SELECT p FROM CEBlogBundle:Post p

WHERE p.rating > :rating ORDER BY p.title

ASC')->setParameter(‘rating', ‘2');

$posts = $query->getResult();

Page 24: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

Query Object

24

$query->getSingleResult();

$query->setMaxResults(1);

->setParameter('title', 'The Title');

->setParameters([

'name' => 'Mohammad',

'title' => 'The Title',

]);

Page 25: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

SELECT اشیاءاوتخاب

پاسامتشا

25

SELECT p FROM CEBlogBundle:Post p

WHERE p.title = "Post 1"

SELECT p FROM CEBlogBundle:Post p

WHERE p.title = :title

Page 26: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

UPDATE

DELETE

26

UPDATE CEBlogBundle:Post p SET p.title =

CONCAT("OLD: ", p.title) WHERE p.id < 5

DELETE CEBlogBundle:Post p

WHERE p.id < 5

Page 27: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

Repository یک وع اصاییک ومو ت

27

$repository = $this->getDoctrine()

->getRepository('CEBlogBundle:Post');

Page 28: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

Repositoryتکمیل

28

repositoryClass:

CE\BlogBundle\Entity\PostRepository

class PostRepository extends EntityRepository

{

public function findOldPosts(){...}

}

$repository = $this->getDoctrine()

->getRepository('CEBlogBundle:Post');

$oldPosts = $repository -> findOldPosts();

Page 29: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

reference اشیاءتیه اشیاء گشاف

کلیذ خاسجی

29

class Post

{

private $comments;

}

class Comment

{

private $post;

}

Page 30: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

ساتط یک ت چىذ

30

#Post.orm.yml

oneToMany:

comments:

targetEntity:

CE\BlogBundle\Entity\Comment

mappedBy: comment

orderBy:

created_at: DESC

Page 31: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

ساتط چىذ ت یک

31

#Comment.orm.yml

manyToOne:

post:

targetEntity: CE\BlogBundle\Entity\Post

inversedBy: comments

Page 32: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

ا referenceکاس تا

32

$comment1 = new Comment();

$comment1->setPost($p);

$em->persist($comment1);

$comment2 = new Comment();

$p->addComment($comment2);

$em->persist($comment2);

Page 33: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

ا referenceکاس تا

33

comment = $this->getDoctrine()

->getRepository('CEBlogBundle:Comment')

->find(5);

$postTitle = $comment->getPost()->getTitle();

Page 34: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

Query Builder اQueryاتضاس کمکی تشای ساخته

34

$repository = $this->getDoctrine()

->getRepository('CEBlogBundle:Post');

$query = $repository->createQueryBuilder('p')

->where('p.name = :title')

->setParameter('title', 'The Title')

->orderBy('p.id', 'ASC')

->getQuery();

$posts = $query->getResult();

Page 35: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

Queryدسیافت مته

پیچیذ ػملگش ای

35

$dql = $repository->createQueryBuilder('p')

->where('p.name = :title')

->setParameter('title', 'The Title')

->orderBy('p.id', 'ASC')

->getDQL();

->where($qb->expr()->orX(

$qb->expr()->eq('p.id', '5'),

$qb->expr()->like('p.title', 'Someth%')

((

Page 36: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

JOIN

ي تاتغ ػملگشاتشتیة،

36

SELECT p FROM Post p JOIN p.user u

WHERE u.name = "Mohammad"

ORDER BY p.id ASC

p.id BETWEEN 5 AND 10

TRIM(p.title) = 'something'

p.id IN (1, 2)

SIZE(p.comments) > 1

Page 37: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

Aggregateتاتغ

پاسخ ااواع Pure

Mixed

37

SELECT CEBlogBundle:Post p,

COUNT(p.comments) AS num_comments

Page 38: یسانشراک سرد ۹۲ راهب ۱۰ تمسق تنناپماک و Domain Logic ی هیلاce.sharif.edu/courses/91-92/2/ce419-1/resources/root/Lecture Slides... · یسانشراک

Symfony Book, 2.2.

Doctrine ORM Documents, http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/index.html.

Patterns of Enterprise Application Architectire, Martin Fowlel, Addison-Wesley, 2002.

38