Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Yii
Code

Xây dựng Startup của bạn: Tiếp cận việc cải thiện các tính năng quan trọng

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called Building Your Startup With PHP.
Building Your Startup: Securing an API
Using Faker to Generate Filler Data for Automated Testing

Vietnamese (Tiếng Việt) translation by Andrea Ho (you can also view the original English article)

Final product image
What You'll Be Creating

Hướng dẫn này là một phần của loạt bài Building Your Startup with PHP trên Envato Tuts+. Trong loạt bài này, tôi hướng dẫn bạn phát hành một startup từ khái niệm đến thực tế bằng cách sử dụng ứng dụng Meeting Planner của tôi làm ví dụ thực tế. Ở mỗi giai đoạn, tôi sẽ phát hành code của Meeting Planner dưới dạng các ví dụ mã nguồn mở để bạn có thể theo dõi. Tôi cũng sẽ chỉ ra các vấn đề kinh doanh liên quan đến startup khi chúng phát sinh.

Làm sao để tiếp cận những cập nhật tính năng chính

Những lúc này, tôi thường làm việc để bổ sung dần các cải tiến cho Meeting Planner. Các vận hành cơ bản hoạt động khá tốt và tôi đang cố gắng cải thiện dần ứng dụng dựa theo tầm nhìn của bản thân và phản hồi của mọi người. Đôi khi, tầm nhìn của tôi là một sự thay đổi lớn hơn, và điều đó trở nên khó khăn hơn khi mà codebase đã tăng triển quá nhiều.

Trong hướng dẫn hôm nay, tôi sẽ nói về những cách suy nghĩ để tạo ra những thay đổi lớn hơn cho một codebase hiện có. Cụ thể, tôi sẽ hướng dẫn bạn qua các tác động của việc bổ sung khả năng để những người tham gia cuộc họp cùng nhau động não và ra quyết định cho các hoạt động, tức là nên làm khi chúng ta họp lại cùng nhau.

Nếu bạn chưa thử, hãy cố gắng sắp xếp một cuộc họp, và giờ bạn cũng có thể lên lịch cho một hoạt động. Nó sẽ giúp bạn hiểu ra xuyên suốt bài hướng dẫn.

Trước khi chúng ta bắt đầu, nhớ chia sẻ nhận xét và phản hồi của bạn bên dưới. Tôi luôn theo dõi chúng và bạn cũng có thể liên hệ với tôi trên Twitter @lookahead_io. Tôi đặc biệt quan tâm nếu bạn muốn đề xuất các tính năng hoặc chủ đề mới cho bài hướng dẫn trong tương lai.

Xin nhắc lại, tất cả mã cho Meeting Planner được viết trong framework Yii2 của PHP. Nếu bạn muốn tìm hiểu thêm về Yii2, hãy xem loạt bài Programming with Yii2 của chúng tôi.

Tính năng lập kế hoạch cho hoạt động

Building Startups - Approaching Major Features - Planning an Activity page

Về cơ bản, Meeting Planner và Simple Planner được thiết kế để lên lịch dễ dàng. Bạn đề xuất một vài thời gian và địa điểm và chia sẻ nó với một người nữa để họ cân nhắc các chọn lựa. Sau đó, bạn quyết định cùng nhau và Meeting Planner sẽ theo dõi các mục nhập lịch, lời nhắc và những cách đơn giản để thực hiện điều chỉnh sau thực tế.

Ví dụ: đây là video của lên lịch cho nhiều nhóm:

Tôi muốn mở rộng phần hỗ trợ lập kế hoạch được cung cấp cho thời gian và địa điểm cho khái niệm hoạt động. Ví dụ, khi lập kế hoạch một cuộc hội họp với bạn bè của bạn, cơ bản là bạn đề nghị, chúng ta nên đi xem phim, đi khiêu vũ hoặc trượt tuyết.

Nói cách khác, tôi muốn tạo một bảng điều khiển giống như bảng cho thời gian ở bên dưới nhưng dành cho các hoạt động:

Building Startups - Approaching Major Features - The Older Plan a Time Panel

Kiến trúc MVC và lược đồ đặt tên code của tôi rất giống nhau giữa thời gian và địa điểm họp, vì vậy các hoạt động xây dựng có vẻ khá đơn giản về bề nổi. Tuy nhiên, quyết định làm như vậy có phân chia khá rộng.

Phạm vi thay đổi

Điều quan trọng bổ sung thay đổi lớn để nghĩ về chỗ nào code sẽ cần thay đổi và đồng thời tất cả những nơi trong ứng dụng của bạn có thể bị ảnh hưởng.

Tác động của việc đối diên với khách hàng

Ở góc độ thiết kế, tôi nghĩ đến các hoạt động sẽ ảnh hưởng ra sao đến dịch vụ khách hàng:

  • Nó sẽ thay đổi việc tổ chức một cuộc họp để cho phép các kiểu sự kiện mới. Sẽ có thêm một bảng điểu khiển trong trang lên kế hoạch.
  • Bảng điều khiển hoạt động cần phải được thiết kế để cho phép mọi người có những chọn lựa mặc định, ví dụ: trượt tuyết đường ngắn thay vì chỉ trượt tuyết,
  • Lời mời qua email sẽ cần bao gồm khoảng trống để liệt kê các tùy chọn hoạt động.
  • Các sự kiện trên lịch sẽ muốn tích hợp các hoạt động đã dươc chọn với chủ đề của buổi họp mặt.
  • Những người tổ chức có thể muốn gửi vài ý tưởng hoạt động cho một người bạn hoặc một nhóm mà không cần chọn địa điểm, vì thế tôi phải cho phép điều này. Hiện tại, hệ thống không cho bạn gửi một lời mời trừ khi bạn có một thời gian và địa điểm đề xuất.
  • Nếu có người yêu cầu thay đổi cuộc họp, việc hỗ trợ cho các yêu cầu thay đổi sẽ phải được mở rộng để hỗ trợ các hoạt động.

Đó hầu hết là những điều cơ bản. Bây giờ, hãy nghĩ về code.

Các tác động của code

Phân nhánh mã nguồn

Thông thường, bạn nên phân nhánh code của bạn trong GitHub để có thể tách biệt phần tính năng mới với phần codebase ổn định đang hoạt động. Cách này cho phép bạn trả về và sửa những lỗi sai hoặc thực hiện dần những thay đổi nhỏ trong khi đang làm việc với những thay đổi lớn quan trọng. GitHub folks chặt chẽ hơn theo cách mang lại giá trị nhất định cho đội nhóm.

Chỉ có một quy tắc: bất kỳ thứ gì trong nhánh master luôn có thể triển khai.

Vì chỉ có một mình tôi và tôi khá ổn trong việc quản lý codebase của mình.

Nhưng code phân nhánh cũng hữu ích khi duyệt lại code đã thay đổi khi bạn sẵn sàng thử nghiệm. Tôi sẽ chia sẻ một minh hoạ về vấn đề này ở phần cuối của hướng dẫn ngày hôm nay.

Sao chép code thông dụng

Giờ sẽ có hai kiểu cuộc họp bây giờ: kiểu chỉ dựa vào ngày và thời gian và kiểu dựa theo hoạt động, ngày tháng và thời gian. Vì vậy, model cuộc họp cần phải thực hiện phù hợp.

Đối với thời gian và địa điểm, có cụ thể là các model MeetingTime và MeetingPlace cũng như các model cho các ưu tiên cho những người tham gia, được gọi là MeetingTimeChoices và MeetingPlaceChoices. Bạn có thể đọc thêm về việc xây dựng chúng này trong Building Your Startup With PHP: Scheduling Availability and Choices.

Vì vậy, việc thêm các hoạt động về cơ bản sẽ yêu cầu sao chép chúng, tạo ra MeetingActivity và MeetingActivityChoices và cùng với controller, model, view, JavaScript và Ajax và di chuyển database của chúng.

Tài khoản và thiết lập cuộc họp

Ngoài ra, những người tổ chức có sở thích cài đặt nhiều tài khoản khác nhau và cho mỗi cài đặt cuộc họp cho dù người tham gia có thể đề xuất và chọn hoạt động cuối cùng hay không.

Template cho Email

Việc bổ sung các hoạt động cũng ảnh hưởng đến email template dành cho các lời mời và những cuộc họp đã hoàn thành.

Lịch sử sự kiện và nhật ký

Vì mọi thay đổi đối với một cuộc họp được ghi lại, nên mỗi chọn lựa hoạt động và thay đổi cũng cần phải được ghi lại.

Các khu vực khác

File lịch .ics sẽ được thay đổi để bao gồm cả hoạt động. Cuối cùng, API sẽ cần được cập nhật — và thậm chí cả thống kê cho trang tổng quan quản trị.

Trong khi nó có vẻ đơn giản, bổ sung các hoạt động thực sự đòi hỏi code mới và nhiều lần thử nghiệm.

Điểm nổi bật trong code

Mặc dù có quá nhiều code cần trình bày trong một hướng dẫn, nhưng chúng ta hãy xem xét các khía cạnh nổi bật từ những khái niệm bên trên.

Di chuyển cơ sở dữ liệu

Đầu tiên, tôi đã tạo ra các database migration (di chuyển cơ sở dữ liệu). Trước đó tôi đã nói về việc tái tạo code với các khía cạnh tính năng nói chung. Dưới đây là ví dụ về di chuyển bảng MeetingActivity so với di chuyển bảng MeetingTime cũ trước đó:

Đây là migration của MeetingTime và bạn có thể thấy những điểm tương đồng:

Cuối cùng, tôi cần năm class cho các bảng mới sau:

  1. m161202_020757_create_meeting_activity_table
  2. m161202_021355_create_meeting_activity_choice_table, để lưu các tùy chọn sẵn có của từng người tham gia cuộc họp trong mỗi hoạt động
  3. m161202_024352_extend_meeting_setting_table_for_activities cho thiết lập của cuộc họp cụ thể để bổ sung hoặc chọn hoạt động
  4. m161202_024403_extend_user_setting_table_for_activities cho thiết lập mặc định của tài khoản
  5. m161203_010030_extend_meeting_table_for_activities và dành để bổ sung is_activity nhằm biểu thị thuộc tính của cuộc họp có hoặc không có hoạt động

Xây dựng framework MVC cho các hoạt động

Building Startups - Approaching Major Features - The Gii Scaffolding Menu

Tôi đã sử dụng chức năng Gii Scaffolding của Yii để tạo ra model, controller và view ban đầu. Tôi đã từng đề cập đến migration và Gii trước đây trong loạt bài này.

Thay đổi jQuery và JavaScript

Cũng có những bổ sung đáng kể cho JavaScript và jQuery, đặc biệt là bây giờ tương tác với các thành phần lập kế hoạch cho cuộc họp được thực hiện bằng Ajax, mà không cần tải lại trang.

Ví dụ ở đây là vòng lặp code để xem liệu thời gian cuộc họp có được chọn hay không:

Bằng cách sử dụng scheme đặt tên phổ biến, việc viết code cho các hoạt động có thể sao chép được từ phần này:

Các chức năng khác chẳng hạn như hiển thị câu trả lời cho người dùng, chỉ cần mở rộng cho các hoạt động:

Ngay cả với một tính năng phản ánh về chất lượng như các tính năng hiện có, việc bổ sung code mới được mở rộng. Ví dụ, ở đây có nhiều JavaScript hơn. Code này bao trùm rất nhiều chức năng tương tác ajax của thời gian họp trên trang lập kế hoạch:

Những bổ sung của framework

Chắc chắn cần phải bổ sung thêm model, controller và view. Đây là một phần trích dẫn từ model MeetingActivity.php để liệt kê một số hoạt động mặc định mà người dùng có thể nhanh chóng để sử dụng:

Building Startups - Approaching Major Features - Activity Typeahead List

Và đây là phần trích dẫn từ/frontend/views/activity/_form.php với plugin TypeaheadBasic sử dụng hàm defaultActivityList() ở phía trên:

Nhưng có rất nhiều thay đổi đối với code không thuộc nhu cầu chung của framework. Đây là hàm canSend() của model Meeting.php, hàm xác định liệu người dùng có được phép gửi lời mời về một cuộc họp hay không. Điều này quyết định liệu một cuộc họp có đủ yêu cầu tối thiểu cho việc gửi lời mời không, chẳng hạn như có thời gian và hoạt động hoặc thời gian và địa điểm.

Dưới đây, bạn có thể thấy làm thế nào một phần mới được bổ sung vào cho các hoạt động:

Template cho Email

Việc cập nhật bố cục email cần chút ý thức về thiết kế và làm sao để trình bày tốt nhất các hoạt động trong lời mời cho cuộc họp và xác nhận. Dưới đây là ví dụ về lời mời qua email đã cập nhật:

Building Startups - Approaching Major Features - Email Invitation Theme

Về cơ bản, nếu một cuộc họp có một hoạt động, thì lời mời bao gồm một dòng dài ở phía trên thời gian và địa điểm, một lần nữa phải sao chép rất nhiều code đang có cho thời gian và địa điểm:

Nghĩ về về các thay đổi

Cuối cùng, tính năng hoạt động yêu cầu một nhánh code mới cực lớn. Đây là yêu cầu pull:

Nó nhiều đến mức tôi quyết định làm một video hài hước cuộn lướt qua tất cả các thay đổi trong GitHub với nhạc nền phù hợp đang phát ... hãy thưởng thức nào:

Nhìn chung, việc xây dựng tính năng hoạt động có thử thách và hữu ích cho tôi để suy nghĩ về kiến ​​trúc của trang và làm sao để tiến độ nhanh và ổn định với sức của một người làm việc cho startup này. Việc sao chép được tận dung, nhưng thay đổi đầu tiên trên phạm vi tổng thể.

Các tính năng hoạt động tác động vào các khu vực nhiều hơn tôi đã dự tính.

Lập kế hoạch trước sẽ giúp bạn mắc kẹt trong cái bẫy phải ngồi code vô cùng tận các tính năng mới. Nếu bạn thấy bản thân mình rơi xuống rãnh sâu, cơn ác mộng khi phải code không hồi kết, hãy kiểm tra các thay đổi của bạn đối với branch dành cho tính năng, chuyển về branch master và làm việc khác đi. Điều này sẽ giúp bạn thư giãn đầu óc.

Tôi chắc chắn mang đến một cách tiếp cận hơi khác biệt để định hướng cho bạn trong phần này, và tôi hy vọng điều này hữu ích.

Bạn có suy nghĩ gì không? Các ý tưởng? Phản hồi? Bạn luôn có thể liên hệ trực tiếp với tôi trên Twitter @lookahead_io. Đón xem các hướng dẫn sắp tới trong loạt bài Building Your Startup with PHP của bạn. Có rất điều đáng ngạc nhiên ở phía trước.

Một lần nữa, nếu bạn chưa thử Meeting Planner hoặc Simple Planner, hãy thử lên lịch cuộc họp đầu tiên của bạn:

Liên kết liên quan

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.