這是我第一個Take home assignment,2017-2020剛出社會第一份工作是個寫JAVA的小研替,2020到了一家新創開始用Python開發,當時公司專案是使用Flask,印象中當時的作業需求是需要使用Python開發web框架不限,所以我是使用較熟悉的Flask來開發,當時特別的是作業期限五天但是從週一開始,等於每天下班都在寫作業。
現在看到的作業需求跟我之前做的應該都一樣,唯一差別是他們希望使用Node.js和TypeScript。
Buying Frenzy
由於作業期限是五天,時間管理顯得尤為重要。
遵循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)代替直接依賴於特定的資料庫實現。
使用適當的設計模式來確保代碼的重用性和可讀性。
Strategy Pattern:
考慮到可能有多種方法來排序或過濾餐廳,可以將每種策略(例如按名稱排序、按價格排序等)封裝為獨立的策略物件。
Observer Pattern:
當用戶從餐廳購買了一道菜,餐廳的現金餘額會增加,而用戶的餘額會減少。這個交易可以被看作是一個觀察者模式,其中餐廳和用戶都是觀察者,並在交易完成時被通知。
Factory Pattern:
如果需要創建特定的資料庫連接或API控制器,可以使用工廠模式,這樣根據不同的需求或配置,可以返回不同的實例。
WebStorm(JS/TS)
PostgreSQL(RMDBS)
Postman
如果有時間,使用Jest或Mocha進行單元測試,確保主要功能的正確性。