Slide 1

Slide 1 text

Generation Gap Pattern on CakePHP4 2022.09.30 CakeFest 2022.09.30 CakeFest

Slide 2

Slide 2 text

Speaker Biography Yuki Kanazawa - Lancers, Inc. / Site Reliability Engineer (2013/11 -) - Live in Sapporo, Japan - Github:yKanazawa - Twitter: @yakitori009 - Language: C++, Java, PHP, Go - Hobby: Shogi(Japanese Chess) 2022.09.30 CakeFest

Slide 3

Slide 3 text

About Lancers 2022.09.30 CakeFest

Slide 4

Slide 4 text

About Lancers Pioneer of "freelance platform" in Japan Basic Crowdsourcing Model Global Crowdsourcing Player Management Resources Openness Corporation (Client) Flexible working styles Person (Lancer) 2015 2009 2008 Work or Delivery Escrow payment Upwork Elance+ODesk Freelancer.com Elance 1998 ODesk 2004 2022.09.30 CakeFest

Slide 5

Slide 5 text

Service Map For Freelancers Services For Clients Services Mentoring Job Matching Education Placement Consulting 2022.09.30 CakeFest

Slide 6

Slide 6 text

https://www.lancers.jp/ Upgrade History 2022.09.30 CakeFest

Slide 7

Slide 7 text

Upgrade History ( https://www.lancers.jp/ ) 1.3 → 2.8 2.8 → 2.10 2.10→ 4.x .. more 5.3 → 5.6 5.6 → 7.3 1.7 year PHP5.6 requires CakePHP2.10 requires PHP7.3 requires 1.8 month 1 day 2 months Ongoing 1.3 5.3 + 2017/06/06 2019/02/05 2019/03/27 2019/03/28 2019/05/28 2022.09.30 CakeFest

Slide 8

Slide 8 text

Lancers Servers(2019) PHP7.3 CakePHP2.10 lancers PHP7.3 CakePHP2.10 lancers PHP7.3 CakePHP2.10 lancers EC2 instance CloudFront Route 53 ALB Auto Scaling App Aurora Reader Aurora Reader Aurora Writer Service Batch MySQL5.7 ALB Admin Admin Console Same Repository S3 CloudFront API Gateway Lambda Thumbnail ElastiCache Redis 2022.09.30 CakeFest

Slide 9

Slide 9 text

Separate repository and rebuild with CakePHP4 PHP7.3 CakePHP4 Lancers_admin PHP7.3 CakePHP2.10 lancers PHP7.3 CakePHP4 Lancers_batch EC2 instance CloudFront Route 53 ALB Auto Scaling App Aurora Reader Aurora Reader Aurora Writer Service Batch MySQL5.7 ALB Admin Admin Console S3 CloudFront API Gateway Lambda Thmbnail ElastiCache Redis New development with CakePHP4 New development with CakePHP4 2022.09.30 CakeFest

Slide 10

Slide 10 text

Migration to containers(2022-) PHP8.1 CakePHP4.3 PHP7.3 CakePHP2.10 PHP8.1 CakePHP4.3 EC2 instance CloudFront Route 53 ALB Auto Scaling App Aurora Reader Aurora Reader Aurora Writer Service Batch (Scheduling Task) ALB Admin Admin Console Fargate CloudWatch Logs Transferred by AWS Logs Kinesis Firehose S3 CloudFront API Gateway Lambda Thmbnail ElastiCache Redis Deploy 2022.09.30 CakeFest

Slide 11

Slide 11 text

UpGrade Progress (admin, batch) Progress admin CakePHP4 75% batch CakePHP4 50% main CakePHP2 ・Migration from main repository to admin and batch repositories on migration 2022.09.30 CakeFest

Slide 12

Slide 12 text

What is Generation Gap Pattern? 2022.09.30 CakeFest

Slide 13

Slide 13 text

What is Generation Gap Pattern? ・A kind of design pattern ・Patterns that assume automatic source code generation tools ・Designs that can be automatically generated again after design changes 2022.09.30 CakeFest

Slide 14

Slide 14 text

Examples of automatic source code generation tools ・Visual Studio Wizard ・GitHub Copilot ・Ruby on rails rails generate ・Laravel artisan ・CakePHP bake and more.. 2022.09.30 CakeFest

Slide 15

Slide 15 text

What is Generation Gap Pattern? ・Automatic source generator generates only superclass sources ・The programmer creates only its subclasses ・Instantiate only subclasses ・Subclasses inherit, override, or add new methods to superclass methods ・The auto-generator does not change the interface (API) used from the subclass. ・The automatic generation tool does not change the Template Method either. 2022.09.30 CakeFest

Slide 16

Slide 16 text

Conditions for Generation Gap Pattern on CakePHP4 2022.09.30 CakeFest

Slide 17

Slide 17 text

Model generated by executing bake + config + src + Controller + Lib + Model + Entity + User.php + Table + UserTable.php + tests + Fixture + UsersFixture.php + TestCase + Model + Table + UserTableTest.php + vendor + webroot Entity User Table UsersTable Bake DB Table structure 2022.09.30 CakeFest

Slide 18

Slide 18 text

Additional implementation in the generated model + config + src + Controller + Lib + Model + Entity + User.php + Table + UserTable.php + tests + Fixture + UsersFixture.php + TestCase + Model + Table + UserTableTest.php + vendor + webroot Entity User Table UsersTable implement DB Bake 2022.09.30 CakeFest

Slide 19

Slide 19 text

Add columns to the database tables + config + src + Controller + Lib + Model + Entity + User.php + Table + UserTable.php + tests + Fixture + UsersFixture.php + TestCase + Model + Table + UserTableTest.php + vendor + webroot Entity User Table UsersTable Bake DB ALTER TABLE 2022.09.30 CakeFest

Slide 20

Slide 20 text

We want to reflect the updated results, but... + config + src + Controller + Lib + Model + Entity + User.php + Table + UserTable.php + tests + Fixture + UsersFixture.php + TestCase + Model + Table + UserTableTest.php + vendor + webroot Entity User Table UsersTable Bake DB Updated Table structure Implementation is lost 2022.09.30 CakeFest ALTER TABLE

Slide 21

Slide 21 text

Generation Gap Pattern on CakePHP4 2022.09.30 CakeFest

Slide 22

Slide 22 text

News: New bake updates ( --updates option) 2022.09.30 CakeFest

Slide 23

Slide 23 text

Interleave superclass for auto-generation + config + src + Controller + Lib + Model + Baked + Entity + User.php + Table + UserTable.php + Entity + User.php + Table + UserTable.php + tests + Fixture + UserFixture.php + TestCase + Model + Table + UserTableTest.php + vendor + webroot Entity Baked¥User Table Baked¥UsersTable User UsersTable Bake DB Table structure 2022.09.30 CakeFest

Slide 24

Slide 24 text

Inherit from auto-generated superclass + config + src + Controller + Lib + Model + Baked + Entity + User.php + Table + UserTable.php + Entity + User.php + Table + UserTable.php + tests + Fixture + UserFixture.php + TestCase + Model + Table + UserTableTest.php + vendor + webroot

Slide 25

Slide 25 text

Additional implementation in inherited classes + config + src + Controller + Lib + Model + Baked + Entity + User.php + Table + UserTable.php + Entity + User.php + Table + UserTable.php + tests + Fixture + UserFixture.php + TestCase + Model + Table + UserTableTest.php + vendor + webroot Entity Baked¥User Table Baked¥UsersTable User UsersTable implement DB Bake 2022.09.30 CakeFest

Slide 26

Slide 26 text

Database(Table) is updated + config + src + Controller + Lib + Model + Baked + Entity + User.php + Table + UserTable.php + Entity + User.php + Table + UserTable.php + tests + Fixture + UserFixture.php + TestCase + Model + Table + UserTableTest.php + vendor + webroot Entity Baked¥User Table Baked¥UsersTable User UsersTable Bake DB implement Bake DB ALTER TABLE 2022.09.30 CakeFest

Slide 27

Slide 27 text

Reflects updated results in superclass + config + src + Controller + Lib + Model + Baked + Entity + User.php + Table + UserTable.php + Entity + User.php + Table + UserTable.php + tests + Fixture + UserFixture.php + TestCase + Model + Table + UserTableTest.php + vendor + webroot Entity Baked¥User Table Baked¥UsersTable User UsersTable Bake DB implement Bake DB Updated Table structure 2022.09.30 CakeFest ALTER TABLE

Slide 28

Slide 28 text

Introduce Plugin 2022.09.30 CakeFest

Slide 29

Slide 29 text

Plugin for Generation Gap Pattern on CakePHP4 ・lancers/cakephp- generation-gap-pattern- model-baker 2022.09.30 CakeFest

Slide 30

Slide 30 text

Diff of default and plugin behavior + config + src + Controller + Lib + Model + Baked + Entity + User.php + Table + UserTable.php + Entity + Table + tests + Fixture + UserFixture.php + TestCase + Model + Table + UserTableTest.php + vendor + webroot $ ./bin/cake bake extended_model users + config + src + Controller + Lib + Model + Entity + User.php + Table + UserTable.php + tests + Fixture + UserFixture.php + TestCase + Model + Table + UserTableTest.php + vendor + webroot $ ./bin/cake bake model users 2022.09.30 CakeFest

Slide 31

Slide 31 text

New bake updates 2022.09.30 CakeFest

Slide 32

Slide 32 text

New bake updates only table structure! ・In Bake 2.8.0-RC1 2022.09.30 CakeFest