iT邦幫忙

2023 iThome 鐵人賽

DAY 5
0

Food Delivery Platform - 2020 Python

時空背景

這是我第一個Take home assignment,2017-2020剛出社會第一份工作是個寫JAVA的小研替,2020到了一家新創開始用Python開發,當時公司專案是使用Flask,印象中當時的作業需求是需要使用Python開發web框架不限,所以我是使用較熟悉的Flask來開發,當時特別的是作業期限五天但是從週一開始,等於每天下班都在寫作業。

作業需求

現在看到的作業需求跟我之前做的應該都一樣,唯一差別是他們希望使用Node.js和TypeScript。
Buying Frenzy

作業解析框架

讀懂需求

確認必須項目

  • 建立後端服務和資料庫用於食品外送平台。
  • 處理和轉換原始數據,再將其載入到資料庫中。
  • 建立一個API server,提供doc,並使用關聯式資料庫,使前端客戶端能夠輕鬆、直觀地瀏覽數據。
  • 提供API操作,讓前端團隊可以進行必要的功能操作。
  • 使用Node.js進行開發(使用Typescript是加分項目)。
  • 提供資料庫和server設定與啟動的指令,並詳細記錄API介面和ETL腳本指令。

確認加分項目

  • 編寫適當的測試並提供coverage report。
  • 在任何免費的雲端主機平台上部署此應用(例如Heroku的免費dyno)。

規劃時程

由於作業期限是五天,時間管理顯得尤為重要。

設計時程 (1天)

  • 系統架構和資料庫模型的設計。
  • 定義API端點以及其功能需求。

實作時程 (3天)

  • 資料預處理和ETL腳本的開發。
  • API伺服器的實作。
  • 資料庫的設定和連接。
  • 實現前端所需的API操作。

測試時程 (1天)

  • API測試和功能測試。
    如果有時間,編寫單元測試。

重視Code的質量

SOLID

遵循SOLID原則,確保代碼的穩定性和擴展性。

Single Responsibility Principle (SRP):
ETL 腳本: 給ETL腳本一個清晰的職責:只負責提取、轉換、加載資料。不要讓它涉及其他非ETL相關的功能,例如資料庫連接管理或API響應。
API 處理器: 每一個API端點應有自己的處理器或控制器,如 ListRestaurantsController 和 PurchaseDishController。

Open/Closed Principle (OCP):
當需要新增新的API功能或資料處理功能時,現有的代碼應該不需修改,只需要擴展。例如,若未來有新的查詢類型,可以簡單地新增新的查詢處理器而不需要修改現有的查詢功能。

Liskov Substitution Principle (LSP):
如果使用物件導向的方式來設計,應確保子類型可以替換其基類型,而不會影響程序的正確性。例如,如果有一個Restaurant基礎類型,其子類型如OpenRestaurant應該可以在需要Restaurant的地方被替換使用。

Interface Segregation Principle (ISP):
確保不強制任何客戶端依賴於它不使用的介面。例如,API的消費者可能只關心某些端點,因此應該提供具有這些特定功能的專用接口,而不是一個大而全的接口。

Dependency Inversion Principle (DIP):
API伺服器和資料庫之間的互動應該依賴於抽象而不是具體的實現。例如,使用資料庫接口(如DatabaseInterface)代替直接依賴於特定的資料庫實現。

Gangs of Four (GoF)

使用適當的設計模式來確保代碼的重用性和可讀性。

Strategy Pattern:
考慮到可能有多種方法來排序或過濾餐廳,可以將每種策略(例如按名稱排序、按價格排序等)封裝為獨立的策略物件。

Observer Pattern:
當用戶從餐廳購買了一道菜,餐廳的現金餘額會增加,而用戶的餘額會減少。這個交易可以被看作是一個觀察者模式,其中餐廳和用戶都是觀察者,並在交易完成時被通知。

Factory Pattern:
如果需要創建特定的資料庫連接或API控制器,可以使用工廠模式,這樣根據不同的需求或配置,可以返回不同的實例。

選擇合適的工具與技術

IDE

WebStorm(JS/TS)

docker

PostgreSQL(RMDBS)

testing

Postman

測試你的code

Unit test

如果有時間,使用Jest或Mocha進行單元測試,確保主要功能的正確性。

建立檢查清單

  • [ ] check list or ticket
  • [ ] 資料庫和API伺服器的設定。
  • [ ] 資料前處理和ETL腳本的開發。
  • [ ] 實現API。
  • [ ] API測試。
  • [ ] 單元測試。
  • [ ] 部署到雲端主機。

上一篇
[Day 4] Take Home Assignment實戰:我的經驗與分享
下一篇
[Day 6] Food Delivery Platform Readme review
系列文
從實戰中學習:Take Home Assignment review & refactor30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言