python-team
npx skills add https://github.com/morning-start/coze-skills --skill python-team
Agent 安装分布
Skill 文档
Python å¢éååå¼å Skill
ä»»å¡ç®æ
- æ¬ Skill ç¨äºï¼éè¿èæåè§è²å¢éï¼èªä¸»å¦ä¹ âPMâæ¶æå¸âé«çº§ç¨åºåï¼ååå·¥ä½ï¼å°ç¨æ·çèªç¶è¯è¨éæ±è½¬åä¸ºå®æ´ç Python 项ç®äº¤ä»ç©
- è½åå å«ï¼èªä¸»å¦ä¹ ä¸ç¥è¯æ´åãéæ±åæä¸æ¾æ¸ ãæ¶æè®¾è®¡ï¼èªéåºé¡¹ç®è§æ¨¡ï¼ã代ç å®ç°ãåè½éªè¯ãçæ¬æ§å¶ãåè½æ©å±ã项ç®éæãæè½è¯å«ä¸è°ç¨ãæ°æ®åºè®¾è®¡ä¸å®ç°ãæ°æ®å±æ½è±¡
- è§¦åæ¡ä»¶ï¼ç¨æ·æåºæç¡®ç软件å¼åéæ±ï¼å¦”åä¸ä¸ªå¤©æ°æ¥è¯¢å·¥å ·”ã”å®ç°ä¸ä¸ªå¾ åäºé¡¹ç³»ç»”ã”æ·»å æ°æ®å¯¼åºåè½”ã”ä¼åä»£ç æ§è½”ã”è®¾è®¡ç¨æ·ç®¡ç系绔çï¼
åç½®åå¤
- ä¾èµè¯´æï¼web_search å·¥å ·ï¼å·²éæï¼
- å
管çå·¥å
·ï¼UVï¼ç°ä»£ Python å
管çå¨ï¼å¿«éãå¯é ãéå®ä¾èµï¼
- å®è£
ï¼
pip install uv - 项ç®åå§åï¼
uv init - ä¾èµç®¡çï¼
uv add package
- å®è£
ï¼
- æä»¶åå¤ï¼æ éåç½®æä»¶
- çæ¬æ§å¶æºå¶ï¼ææææ¡£å代ç å¿ é¡»å å«çæ¬ä¿¡æ¯ï¼ä½¿ç¨è¯ä¹åçæ¬ï¼Semantic Versioningï¼å¦ v1.0.0ï¼ï¼è®°å½çæ¬åå²ååæ´åå
æä½æ¥éª¤
é¶æ®µ0ï¼èªä¸»å¦ä¹ ä¸ç¥è¯æ´å
ç®æ ï¼éè¿ç½ç»æç´¢è·åç¸å ³é¢åç¥è¯ï¼çæé¡¹ç®èæ¯ææ¡£ï¼ä¸ºåç»é¶æ®µæä¾ç¥è¯æ¯æ
æ§è¡æ¥éª¤ï¼
-
è¯å«å ³é®è¯ï¼ä»ç¨æ·éæ±ä¸æåæ ¸å¿ææ¯ãé¢åãå·¥å ·å ³é®è¯
- ææ¯å ³é®è¯ï¼å¦”REST API”ã”WebSocket”ã”CSVå¤ç”ã”æ°æ®åº”ã”ORM”
- é¢åå ³é®è¯ï¼å¦”å¤©æ°æ¥è¯¢”ã”å¾ åäºé¡¹”ã”æ°æ®åæ”ã”ç¨æ·ç®¡ç”
- å·¥å ·å ³é®è¯ï¼å¦”Flask”ã”pandas”ã”UV”ã”SQLAlchemy”ã”MongoDB”
-
æ§è¡ç½ç»æç´¢ï¼3-6è½®ï¼ï¼
- 第1è½®ï¼æç´¢”<é¢å> æä½³å®è·µ”ï¼è·åéç¨è®¾è®¡åå
- 第2è½®ï¼æç´¢”<ææ¯> æ¡æ¶å¯¹æ¯”ï¼å¦”Flask vs FastAPI 对比
- 第3è½®ï¼æç´¢”<åè½> å®ç°æ¹æ¡”ï¼å¦”Python 天æ°APIè°ç¨ç¤ºä¾”
- 第4è½®ï¼å¯éï¼ï¼æç´¢”<é®é¢> 常è§å”ï¼å¦”REST API 常è§é误”
- 第5è½®ï¼æç´¢”Python 3.11+ æ°ç¹æ§”ã”æ¡æ¶çæ¬å ¼å®¹æ§”ã”UV å 管ç卿佳å®è·µ”ã”loguru æ¥å¿åºæä½³å®è·µ”
- 第6è½®ï¼æ°å¢ï¼ï¼æç´¢”æ°æ®åºéå”ã”SQLAlchemy vs MongoDB”ã”åéæ°æ®åºå¯¹æ¯”ã”徿°æ®åºå¯¹æ¯”ã”Repository æ¨¡å¼æä½³å®è·µ”ã”æ°æ®åºæ§è½ä¼å”
-
çé䏿´åä¿¡æ¯ï¼
- è¯ä¼°æç´¢ç»æçå¯ä¿¡åº¦åæ¶ææ§
- æåå ³é®ä¿¡æ¯ï¼ææ¯éå便®ã设计模å¼ãæä½³å®è·µã常è§é®é¢ãçæ¬ç¹æ§ãUV 使ç¨ãæ°æ®åºéå
- æ´åå²çªä¿¡æ¯ï¼æ 注ä¸åæ¹æ¡çä¼ç¼ºç¹
- éç¹å ³æ³¨ï¼çæ¬å ¼å®¹æ§ãé¿æç»´æ¤æ§ãå¦ä¹ èµæºãUV å 管çä¼å¿ãæ°æ®åºç¹æ§
- çæç»æåçç¥è¯æ»ç»
-
çæ
docs/background.mdï¼- åè references/background-template.md çç»æ
- å å«ï¼é¡¹ç®èæ¯æ¦è¿°ãææ¯é¢åç¥è¯ãæä½³å®è·µãå·¥å ·å¯¹æ¯ï¼å«çæ¬ä¿¡æ¯ï¼ã常è§é®é¢ãUV å 管çãæ°æ®åºç¸å ³ç¥è¯
- å¢å¼ºï¼å·¥å ·å¯¹æ¯ç»´åº¦å¢å çæ¬å ¼å®¹æ§ãé¿æç»´æ¤æ§ãå¦ä¹ èµæº
- å¢å¼ºï¼æ°æ®åºéåæåï¼SQLiteãPostgreSQLãMongoDBãåéæ°æ®åºã徿°æ®åºï¼
- å¢å¼ºï¼æ°æ®åºè®¾è®¡ä¸å®ç°æä½³å®è·µï¼ORM/ODMãç´¢å¼çç¥ãæ§è½ä¼åï¼
- ç¡®ä¿ä¿¡æ¯åç¡®ãå®ç¨ãæäºçè§£
é¶æ®µ1ï¼é¡¹ç®ç»çï¼PMï¼- éæ±åæä¸ææ¡£å
ç®æ ï¼ç»åèæ¯ç¥è¯çè§£ç¨æ·éæ±ï¼çææ¸ æ°çéæ±ææ¡£ï¼è¯ä¼°é¡¹ç®è§æ¨¡
æ§è¡æ¥éª¤ï¼
-
ç»åèæ¯ç¥è¯åæéæ±ï¼
- é
读
docs/background.mdï¼äºè§£é¢åæä½³å®è·µå常è§é·é± - è¯å«ç¨æ·éæ±ä¸å¯è½éæ¼çå ³é®ç¹ï¼åºäºé¢åç¥è¯ï¼
- è¯ä¼°éæ±çåçæ§åå¯è¡æ§
- é
读
-
è¯å«éæ±ä¸ç模ç³ç¹æä¸å®æ´ä¹å¤
-
æå¤è¿è¡2è½®æ¾æ¸ 交äºï¼å¦æéæ±ä¸æç¡®ï¼ï¼
- 以”ãæé®ã”å¼å¤´åç¨æ·ç¡®è®¤ç»è
- å ¸åé®é¢ï¼åè½è¾¹çãè¾å ¥è¾åºæ ¼å¼ãéåè½è¦æ±ãææ¯æ å好ãçæ¬è¦æ±ã项ç®è§æ¨¡é¢æç
- 示ä¾ï¼”åä¸ä¸ªå¤©æ°æ¥è¯¢å·¥å ·” â æ¾æ¸ ”æ¯æåªäºåå¸ï¼æ°æ®æ¥æºï¼æ¯å¦ç¼åï¼”
-
è¯ä¼°é¡¹ç®è§æ¨¡ï¼
- å°é¡¹ç®ï¼< 5 个åè½ç¹ï¼< 500 è¡ä»£ç 颿
- ä¸å项ç®ï¼5-10 个åè½ç¹ï¼500-2000 è¡ä»£ç 颿
- 大项ç®ï¼> 10 个åè½ç¹ï¼> 2000 è¡ä»£ç 颿
- å¨
requirements.mdä¸æç¡®æ æ³¨é¡¹ç®è§æ¨¡
-
æ°æ®åºéæ±æ¾æ¸ ï¼æ°å¢ï¼ï¼
- 确认æ¯å¦éè¦æ°æ®æä¹ ååå¨
- ç¡®è®¤æ°æ®ç±»åï¼å ³ç³»åãææ¡£åãåéãå¾ï¼
- ç¡®è®¤æ°æ®è§æ¨¡åå¹¶åéæ±
- 确认æ¯å¦éè¦å¤æ°æ®åºæ¯æ
- 确认æ¯å¦éè¦æ°æ®åºåæ¢è½å
-
åºäºç¨æ·åé¦ãèæ¯ç¥è¯å项ç®è§æ¨¡è¯ä¼°ï¼çæ
docs/requirements.mdï¼- åè references/requirements-template.md çç»æ
- å å«ï¼åè½å表ãè¾å ¥è¾åºè¯´æãéåè½æ§è¦æ±ãå设ä¸çº¦æãçæ¬è¦æ±ã项ç®è§æ¨¡ãæ°æ®åºéæ±
- å ³é®ï¼åè background.md ä¸çæä½³å®è·µï¼å®åéåè½æ§è¦æ±
- æ°å¢ï¼æç¡® Python 3.11+ çæ¬è¦æ±ãçæ¬æ§å¶çç¥ãUV å 管çè¦æ±ã项ç®è§æ¨¡ãloguru æ¥å¿åºè¦æ±ï¼å¼ºå¶ä½¿ç¨ï¼ãæ°æ®åºéåè¦æ±ï¼åè database-selection-guide.mdï¼
- ç¡®ä¿æ¯ä¸ªåè½ç¹é½æ¸ æ°å¯æ§è¡
- è®°å½çæ¬ï¼v1.0.0ï¼åå§çæ¬ï¼
é¶æ®µ2ï¼ç³»ç»æ¶æå¸ï¼Architectï¼- æ¶æè®¾è®¡
ç®æ ï¼åºäºéæ±ææ¡£ãèæ¯ç¥è¯å项ç®è§æ¨¡ï¼è®¾è®¡ç³»ç»æ¶æï¼çæè®¾è®¡ææ¡£å任塿¸ å
æ§è¡æ¥éª¤ï¼
- é
读
docs/requirements.mdåbackground.mdï¼çè§£å®æ´éæ±ãé¢åç¥è¯ã项ç®è§æ¨¡åæ°æ®åºéæ± - æ ¹æ®é¡¹ç®è§æ¨¡éæ©æ¶æç»ç»æ¹å¼ï¼
- å°é¡¹ç®ï¼ä½¿ç¨åæä»¶æç®åæä»¶å¤¹ç»æ
project/ âââ main.py âââ README.md # é¡¹ç®æ ¹ç®å½ âââ pyproject.toml âââ uv.lock âââ docs/ # ææ¡£æä»¶å¤¹ âââ background.md âââ requirements.md âââ architecture.md - 大项ç®ï¼ä½¿ç¨æ å Python é¡¹ç®æä»¶å¤¹ç»ç»
project/ âââ README.md # é¡¹ç®æ ¹ç®å½ âââ pyproject.toml âââ uv.lock âââ src/ â âââ __init__.py â âââ main.py â âââ api/ # API 模å â âââ models/ # æ°æ®æ¨¡å â âââ services/ # ä¸å¡é»è¾ â âââ repositories/ # æ°æ®è®¿é®å±ï¼Repositoryï¼ â âââ utils/ # å·¥å ·å½æ° âââ tests/ â âââ test_main.py âââ docs/ # ææ¡£æä»¶å¤¹ âââ background.md âââ requirements.md âââ architecture.md
- å°é¡¹ç®ï¼ä½¿ç¨åæä»¶æç®åæä»¶å¤¹ç»æ
- è®¾è®¡ç³»ç»æ¶æï¼
- åè background.md ä¸çå·¥å ·å¯¹æ¯ï¼è¿è¡ææ¯éå
- 模åååä¸èè´£åé ï¼æ ¹æ®é¡¹ç®è§æ¨¡ï¼
- æ°æ®æµè®¾è®¡
- ææ¯éåï¼å¿
须说æçç±ï¼å¼ç¨ background.md ä¸ç对æ¯åæï¼ï¼
- å¿ é¡»è¯¦ç»å¯¹æ¯è³å°2ç§æ¹æ¡
- 说ææè¡¡çç±ï¼æ§è½ vs æç¨æ§ãåè½ vs å¤æåº¦ï¼
- å¼ç¨ background.md ä¸çå¯¹æ¯æ°æ®ï¼æ§è½ãçæãå¦ä¹ æ²çº¿ãçæ¬å ¼å®¹æ§ï¼
- æç¡®è¯´æéæ©æ¹æ¡çä¼å¿åä¸è¶³
- æ¥å£å®ä¹ï¼å½æ°ç¾åãåæ°è¯´æï¼å¿ é¡»å å«ç±»å注解ï¼
- åè background.md ä¸çæä½³å®è·µï¼åºç¨è®¾è®¡æ¨¡å¼åæ¶ææ¨¡å¼
- UV å 管ççç¥ï¼ä½¿ç¨ pyproject.toml 管çä¾èµï¼uv.lock éå®çæ¬
- æè½è¯å«ï¼è¯å«é¡¹ç®ä¸å¯è½çå¯å¤ç¨æè½æ¨¡åï¼å¨ architecture.md ä¸å®ä¹æè½æ¥å£
- è®¾è®¡æ°æ®åºæ¶æï¼æ°å¢ï¼ï¼
- åèæ°æ®åºéåæåéæ©åéçæ°æ®åºï¼SQLiteãPostgreSQLãMongoDBãChromaDBãNeo4j çï¼
- è®¾è®¡æ°æ®æ¨¡åï¼è¡¨ç»æãç´¢å¼çç¥ï¼
- è®¾è®¡æ°æ®è®¿é®å±ï¼Repository 模å¼ï¼
- å®ç°æ°æ®åºæ½è±¡å±ï¼æ¯æå¤æ°æ®åºåæ¢ï¼
- çææ°æ®åºè®¾è®¡ææ¡£åæ°æ®å±æ½è±¡ææ¡£
- çæä»¥ä¸æä»¶ï¼
docs/architecture.mdï¼åè references/architecture-template.md- æ°å¢ï¼æ°æ®åºè®¾è®¡ç« èï¼åè database-design-template.mdï¼
- æ°å¢ï¼æ°æ®è®¿é®å±ç« èï¼åè data-abstraction-template.mdï¼
- æ°å¢ï¼æ ¹æ®é¡¹ç®è§æ¨¡éæ©å¯¹åºçæ¶ææ¨¡æ¿
- æ°å¢ï¼çæ¬æ§å¶ç« èï¼çæ¬çç¥ãä¾èµçæ¬éå®ï¼
- æ°å¢ï¼UV å 管çç« èï¼pyproject.toml é ç½®ãuv.lock çç¥ï¼
- æ°å¢ï¼æ°æ®åºè®¾è®¡ç« èï¼æ°æ®åºéåãæ°æ®æ¨¡åãç´¢å¼çç¥ï¼
- æ°å¢ï¼æ°æ®è®¿é®å±ç« èï¼Repository 模å¼ãBaseRepository æ¥å£ãå ·ä½å®ç°ï¼
- æ°å¢ï¼æè½è¯å«å管çç« èï¼æè½åè¡¨ãæ¥å£å®ä¹ãå¤ç¨æåï¼
- æç¡® Python 3.11+ çæ¬è¦æ±
- å¢å ææ¯éåæè¡¡è¯´æ
docs/database-design.mdï¼åè references/database-design-template.md- æ°æ®åºéåä¸é ç½®
- æ°æ®æ¨¡å设计
- ç´¢å¼çç¥
- æ°æ®è®¿é®æ¥å£å®ä¹
docs/data-abstraction.mdï¼åè references/data-abstraction-template.md- BaseRepository æ¥å£å®ä¹
- SQLAlchemy / MongoDB å®ç°
- Repository å·¥å
- æ°æ®åºåæ¢çç¥
README.mdï¼åè references/readme-template.mdï¼å å«åºç¡ç¨æ³ãä¾èµå®è£ ï¼ä½¿ç¨ UVï¼ãè¿è¡æ¹å¼todo.mdï¼åè references/todo-template.mdï¼åå§ç¶æææä»»å¡æ 记为[ ]ï¼æªå®æï¼- æ°å¢ï¼ç±»å注解ç¸å ³ä»»å¡
- æ°å¢ï¼UV å 管çä»»å¡
- æ°å¢ï¼æ°æ®åºè®¾è®¡ä¸å®ç°ä»»å¡
- æ°å¢ï¼æè½è¯å«ä¸ç®¡çä»»å¡
- æ°å¢ï¼æ ¹æ®é¡¹ç®è§æ¨¡è°æ´ä»»å¡å表
é¶æ®µ3ï¼é«çº§ç¨åºåï¼Senior Devï¼- 代ç å®ç°
ç®æ ï¼åºäºæ¶æè®¾è®¡ã任塿¸ ååèæ¯ç¥è¯ï¼ç¼åé«è´¨éç坿§è¡ä»£ç
æ§è¡æ¥éª¤ï¼
- é
读
docs/architecture.mdãdocs/database-design.mdãdocs/data-abstraction.mdãtodo.mdåbackground.mdï¼ç解系ç»è®¾è®¡ã项ç®è§æ¨¡ãæ°æ®åºè®¾è®¡ãæ°æ®è®¿é®å±æ¶æãé¢åæä½³å®è·µåæè½å®ä¹ - æ ¹æ®é¡¹ç®è§æ¨¡ç»ç»ä»£ç æä»¶ï¼
- å°é¡¹ç®ï¼ææä»£ç å¨
main.pyä¸ - 大项ç®ï¼
src/__init__.pyï¼å åå§åsrc/main.pyï¼ä¸»å ¥å£src/api/ï¼API 模åsrc/models/ï¼æ°æ®æ¨¡åsrc/services/ï¼ä¸å¡é»è¾src/repositories/ï¼æ°æ®è®¿é®å±ï¼Repositoryï¼src/utils/ï¼å·¥å ·å½æ°tests/ï¼æµè¯æä»¶
- å°é¡¹ç®ï¼ææä»£ç å¨
- ç¼å代ç ï¼
- å¿
é¡»ä½¿ç¨ Python 3.11+ ç¹æ§ï¼
- ç±»åæ³¨è§£ï¼Type Hintsï¼ï¼ææå½æ°åæ°åè¿åå¼å¿ 须使ç¨ç±»å注解
- ä½¿ç¨ PEP 585ï¼å
ç½®æ³åç±»åï¼ï¼å¦
list[int]èéList[int] - ä½¿ç¨ PEP 646ï¼ç±»ååæ°ï¼ï¼å¦
def func[T](items: list[T]) -> T: - ä½¿ç¨ match-case è¯å¥ï¼Python 3.10+ï¼è¿è¡æ¨¡å¼å¹é
- ä½¿ç¨æ°æ®ç±»ï¼dataclassï¼çæ¹è¿ç¹æ§
- 代ç ç»ææ¸ æ°ï¼å å«å¿ è¦æ³¨é
- åºç¨ background.md ä¸çæä½³å®è·µï¼å¦é误å¤çãä½¿ç¨ loguru è¿è¡æ¥å¿è®°å½ã代ç è§è
- åè background.md ä¸ç常è§é®é¢ï¼é¿å å ¸åé·é±
- è°ç¨å·²ææè½ï¼å¨å®ç°æ°åè½æ¶ï¼ä¼å è°ç¨ architecture.md ä¸å®ä¹çæè½æ¨¡åï¼é¿å éå¤å¼å
- å®ç°æ°æ®è®¿é®å±ï¼
- å®ç° BaseRepository æ¥å£
- å®ç° SQLAlchemyBaseRepository / MongoDBBaseRepository
- å®ç°å ·ä½å®ä½ç Repositoryï¼UserRepository çï¼
- å®ç° RepositoryFactory å·¥å
- å®ç°ææåè½ç¹
- å
å«
if __name__ == "__main__"å ¥å£ - ç¡®ä¿ä»£ç å¯ç´æ¥è¿è¡ï¼æ éé¢å¤é ç½®
- ç±»åæ³¨è§£ç¤ºä¾ï¼
def process_data(data: list[dict[str, Any]]) -> dict[str, int]: """å¤çæ°æ®å¹¶è¿åç»è®¡ç»æ""" counts: dict[str, int] = {} for item in data: key = item.get("key") if key: counts[key] = counts.get(key, 0) + 1 return counts - æè½è°ç¨ç¤ºä¾ï¼
from src.utils.helpers import existing_skill def new_feature(data: list[Any]) -> dict[str, Any]: """æ°åè½å®ç°ï¼è°ç¨å·²ææè½""" # ç´æ¥è°ç¨æè½ result = existing_skill(data) return result - Repository 使ç¨ç¤ºä¾ï¼
from src.repositories import UserRepository def get_user(user_id: int) -> User | None: """è·åç¨æ·""" repo = UserRepository(session) return repo.get_by_id(user_id)
- å¿
é¡»ä½¿ç¨ Python 3.11+ ç¹æ§ï¼
- çæ UV ä¾èµæä»¶ï¼
pyproject.tomlï¼ä½¿ç¨æ åæ ¼å¼ï¼å å«é¡¹ç®å æ°æ®åä¾èµ- æ°å¢æ°æ®åºä¾èµï¼sqlalchemyãpymongoãchromadbãpsycopg2-binary ç
- æ°å¢è¿ç§»å·¥å ·ï¼alembicï¼å ³ç³»åæ°æ®åºï¼ãmongomockï¼MongoDB æµè¯ï¼
uv.lockï¼èªå¨çæï¼éå®ä¾èµçæ¬- åèæ¨¡æ¿ï¼references/uv-lock-template.md
- åæ¥æ´æ°
todo.mdï¼- å°å·²å®æç任塿 记为
[x] - ç¡®ä¿æ¯ä¸ªä»»å¡å¯¹åº
requirements.mdä¸çä¸ä¸ªæ¡ç®
- å°å·²å®æç任塿 记为
é¶æ®µ4ï¼è´¨ééªè¯ – åè½æµè¯
ç®æ ï¼éªè¯ä»£ç æ¯å¦æ»¡è¶³åå§éæ±ï¼çææµè¯æ¥å
æ§è¡æ¥éª¤ï¼
- 设计æµè¯ç¨ä¾ï¼
- è¦ç
requirements.mdä¸çææåè½ç¹ - åè background.md ä¸ç常è§é®é¢ï¼è®¾è®¡é对æ§çæµè¯åºæ¯
- å 嫿£å¸¸åºæ¯åè¾¹çæ åµ
- æ°å¢æ°æ®åºæµè¯ï¼
- æµè¯ CRUD æä½
- æµè¯äºå¡å¤ç
- æµè¯å¹¶åæä½
- 使ç¨å åæ°æ®åºè¿è¡æµè¯ï¼SQLite / mongomockï¼
- è®°å½æ¯ä¸ªæµè¯ç¨ä¾çè¾å ¥å颿è¾åº
- è¦ç
- æ§è¡æµè¯ï¼æ¨¡æè¿è¡ï¼ï¼
- åæä»£ç é»è¾ï¼éªè¯åè½æ¯å¦æ£ç¡®å®ç°
- æ£æ¥æ¯å¦ç¬¦åæ¶æè®¾è®¡
- éªè¯ UV ä¾èµæä»¶ï¼ç¡®ä¿ pyproject.toml å uv.lock æ£ç¡®
- éªè¯ç±»åæ³¨è§£å®æ´æ§ï¼ç¡®ä¿ææå ³é®å½æ°é½æç±»å注解
- éªè¯æè½è°ç¨ï¼ç¡®è®¤æ°åè½æ£ç¡®è°ç¨äºå·²ææè½
- éªè¯ loguru æ¥å¿é ç½®ï¼ç¡®ä¿æ¥å¿æ£ç¡®è¾åº
- éªè¯æ°æ®è®¿é®å±ï¼ç¡®è®¤ Repository æ¥å£å®ç°æ£ç¡®
- éªè¯æ°æ®åºæä½ï¼ç¡®è®¤ CRUD æä½ãæ¥è¯¢ä¼åæ£ç¡®
- åè background.md ä¸çå®å ¨èèï¼éªè¯å®å ¨æªæ½
- çæ
test_report.mdï¼- åè references/test-report-template.md
- ååºï¼å·²éªè¯åè½ãæ¯å¦éè¿ãæ½å¨é£é©ææªè¦çåºæ¯
- 对æ¯ä¸ªåè½ç»åºæç¡®çéè¿/ä¸éè¿å¤æ
- å¼ç¨ background.md ä¸çç¥è¯ï¼è¯´ææµè¯è¦çç常è§é®é¢
- æ°å¢ï¼éªè¯ Python 3.11+ ç¹æ§ä½¿ç¨æ åµãUV ä¾èµç®¡çæ åµãæè½è°ç¨æ åµãloguru æ¥å¿é ç½®ãæ°æ®åºæä½éªè¯
é¶æ®µ5ï¼åè½æ©å±ï¼æ·»å åè½ï¼
ç®æ ï¼å¨ç°æé¡¹ç®åºç¡ä¸æ·»å æ°åè½ï¼è¯å«å¹¶å¤ç¨å·²ææè½
è§¦åæ¡ä»¶ï¼ç¨æ·æåº”æ·»å åè½”ã”æ©å±åè½”çéæ±
æ§è¡æ¥éª¤ï¼
-
读åç°æé¡¹ç®ï¼
- é
读
docs/requirements.mdãdocs/architecture.mdãdocs/database-design.mdãdocs/data-abstraction.mdãdocs/background.md - 读åç°æä»£ç æä»¶ï¼main.py æ src/ ç®å½ï¼
- 读å
pyproject.tomläºè§£ç°æä¾èµ
- é
读
-
åæç°ææ¶æï¼
- çè§£ç°æåè½æ¨¡ååæ°æ®æµ
- è¯å« architecture.md ä¸å®ä¹çå¯è°ç¨æè½
- è¯ä¼°æ°æ®åºæ©å±éæ±ï¼æ¯å¦éè¦æ°å¢æ°æ®è¡¨/éåãæ´æ°ç´¢å¼
- è¯ä¼°æ°åè½å¯¹ç°æç³»ç»çå½±å
-
设计åè½æ©å±æ¹æ¡ï¼
- æç¡®æ°åè½ç鿱忥å£
- ä¼å 使ç¨å·²ææè½å®ç°æ°åè½
- 设计æ°åè½ç代ç éé æ¹æ¡
- è®¾è®¡æ°æ®åºåæ´ï¼æ°å¢è¡¨/éåãæ´æ° Repository
- è¯ä¼°æ¯å¦éè¦æ°å¢ä¾èµ
-
éé 代ç ï¼
- è°ç¨å·²ææè½æ¨¡å
- ç¼åæ°åè½ä»£ç
- æ´æ°æ°æ®è®¿é®å±ï¼æ°å¢æä¿®æ¹ Repository
- ç¼åæ°æ®åºè¿ç§»èæ¬ï¼å¦éè¦ï¼
- ç¡®ä¿ä¸ç°æä»£ç 飿 ¼ä¸è´
- æ·»å ç±»åæ³¨è§£å loguru æ¥å¿
-
æ´æ°ææ¡£ï¼
- æ´æ°
requirements.mdï¼æ·»å æ°åè½éæ±ï¼æ´æ°çæ¬å·ï¼v1.0.0 â v1.1.0ï¼ - æ´æ°
architecture.mdï¼æ´æ°æ¶æè®¾è®¡ãæè½å表 - æ´æ°
docs/database-design.mdï¼æ´æ°æ°æ®åºè®¾è®¡ - æ´æ°
docs/data-abstraction.mdï¼æ´æ°æ°æ®è®¿é®å± - æ´æ°
todo.mdï¼æ·»å æ°åè½å¼åä»»å¡ãæ°æ®åºæ©å±ä»»å¡ - æ´æ°
README.mdï¼æ´æ°åè½å表å使ç¨è¯´æ
- æ´æ°
-
æµè¯éªè¯ï¼
- æµè¯æ°åè½
- å彿µè¯ç°æåè½
- æµè¯æ°æ®åºåæ´ï¼éªè¯æ°å¢è¡¨/éåãç´¢å¼ãè¿ç§»
- æ´æ°
test_report.md - ä½¿ç¨ UV æ´æ°ä¾èµï¼å¦éè¦ï¼ï¼
uv add package
-
çææ©å±è®¡åææ¡£ï¼
- åè references/feature-extension-template.md
- è®°å½æ©å±è¿ç¨ã代ç åæ´ãææ¡£æ´æ°ãæ°æ®åºåæ´
é¶æ®µ6ï¼é¡¹ç®éæ
ç®æ ï¼åæä»£ç è´¨é䏿§è½ï¼æ§è¡éæï¼æåå¯ç»´æ¤æ§
è§¦åæ¡ä»¶ï¼ç¨æ·æåº”éæ”ã”ä¼å”ã”æ¹è¿ä»£ç ”çéæ±
æ§è¡æ¥éª¤ï¼
-
读åç°æé¡¹ç®ï¼
- è¯»åææä»£ç æä»¶
- è¯»åææææ¡£æä»¶
- 读å
pyproject.tomlåuv.lock
-
åæä»£ç è´¨é䏿§è½ï¼
- åæä»£ç å¤æåº¦ãéå¤ä»£ç ãå½åè§è
- è¯å«æ§è½ç¶é¢
- è¯å«æ¶æé®é¢ï¼é«è¦åãä½å èï¼
- åææ°æ®åºæ§è½ï¼æ¥è¯¢ä¼åãç´¢å¼ä¼åãè¿æ¥æ±
- è¯å«å¯æå为æè½ç模å
-
è®¾è®¡éææ¹æ¡ï¼
- ç¡®å®éæç®æ ï¼æ§è½ãå¯è¯»æ§ãå¯ç»´æ¤æ§ï¼
- 设计代ç éææ¹æ¡ï¼æå彿°/ç±»ãç®åé»è¾ï¼
- 设计æ§è½ä¼åæ¹æ¡ï¼ç®æ³ãç¼åãå¹¶åï¼
- è®¾è®¡æ¶æä¼åæ¹æ¡ï¼è§£è¦ãæ¥å£ä¼åï¼
- è®¾è®¡æ°æ®åºä¼åæ¹æ¡ï¼æ¥è¯¢ä¼åãç´¢å¼ä¼åãè¿æ¥æ± ä¼å
- è¯å«å¹¶å®ä¹æ°çæè½æ¨¡å
-
æ§è¡éæï¼
- æ§è¡ä»£ç éæ
- æ§è¡æ§è½ä¼å
- æ§è¡æ¶æä¼å
- æ§è¡æ°æ®åºä¼åï¼ä¼åæ¥è¯¢ãæ´æ°ç´¢å¼ãè°æ´è¿æ¥æ±
- ä¼åæ°æ®è®¿é®å±ï¼æ¹è¿ Repository å®ç°
- æ´æ° architecture.md ä¸çæè½è¯å«ç« è
- ä½¿ç¨ UV æ´æ°ä¾èµï¼å¦éè¦ï¼ï¼
uv lock --upgrade
-
éªè¯éæç»æï¼
- å彿µè¯
- æ§è½æµè¯
- æ°æ®åºæ§è½æµè¯
- åè½éªè¯
- æ´æ°
test_report.md
-
çæéææ¥åï¼
- åè references/refactoring-plan-template.md
- è®°å½éæååç对æ¯ï¼ä»£ç è´¨éãæ§è½ãæ¶æãæ°æ®åºæ§è½ï¼
- è®°å½æè½è¯å«å管ç
æç»äº¤ä»
æ°é¡¹ç®äº¤ä»æ ¼å¼
æç
§ä»¥ä¸æ ¼å¼è¾åºæææä»¶å
å®¹ï¼æ¯ä¸ªæä»¶ä»¥ --- FILE: filename --- å¼å¤´ï¼ï¼
å°é¡¹ç®ï¼åæä»¶ï¼ï¼
--- FILE: README.md ---
<README.md 宿´å
容>
--- FILE: pyproject.toml ---
<pyproject.toml 宿´å
容>
--- FILE: uv.lock ---
<uv.lock 宿´å
容>
--- FILE: main.py ---
<main.py 宿´å
容>
--- FILE: docs/background.md ---
<docs/background.md 宿´å
容>
--- FILE: docs/requirements.md ---
<docs/requirements.md 宿´å
容>
--- FILE: docs/architecture.md ---
<docs/architecture.md 宿´å
容>
--- FILE: docs/database-design.md ---
<docs/database-design.md 宿´å
容>
--- FILE: docs/data-abstraction.md ---
<docs/data-abstraction.md 宿´å
容>
--- FILE: test_report.md ---
<test_report.md 宿´å
容>
大项ç®ï¼æä»¶å¤¹ç»ç»ï¼ï¼
--- FILE: README.md ---
<README.md 宿´å
容>
--- FILE: pyproject.toml ---
<pyproject.toml 宿´å
容>
--- FILE: uv.lock ---
<uv.lock 宿´å
容>
--- FILE: src/__init__.py ---
<src/__init__.py 宿´å
容>
--- FILE: src/main.py ---
<src/main.py 宿´å
容>
--- FILE: src/repositories/__init__.py ---
<src/repositories/__init__.py 宿´å
容>
--- FILE: src/repositories/base.py ---
<BaseRepository æ¥å£>
--- FILE: src/repositories/user_repo.py ---
<UserRepository å®ç°>
--- FILE: tests/__init__.py ---
<tests/__init__.py 宿´å
容>
--- FILE: tests/test_repositories.py ---
<Repository æµè¯>
--- FILE: docs/background.md ---
<docs/background.md 宿´å
容>
--- FILE: docs/requirements.md ---
<docs/requirements.md 宿´å
容>
--- FILE: docs/architecture.md ---
<docs/architecture.md 宿´å
容>
--- FILE: docs/database-design.md ---
<docs/database-design.md 宿´å
容>
--- FILE: docs/data-abstraction.md ---
<docs/data-abstraction.md 宿´å
容>
--- FILE: test_report.md ---
<test_report.md 宿´å
容>
åè½æ©å±äº¤ä»æ ¼å¼
--- FILE: docs/requirements.md ---
<æ´æ°åç requirements.md>
--- FILE: docs/architecture.md ---
<æ´æ°åç architecture.md>
--- FILE: docs/database-design.md ---
<æ´æ°åç database-design.md>
--- FILE: docs/data-abstraction.md ---
<æ´æ°åç data-abstraction.md>
--- FILE: main.py æ src/... ---
<ä¿®æ¹åçä»£ç æä»¶>
--- FILE: pyproject.toml ---
<æ´æ°åç pyproject.tomlï¼å¦æï¼>
--- FILE: README.md ---
<æ´æ°åç README.md>
--- FILE: feature_extension_plan.md ---
<åè½æ©å±è®¡åææ¡£>
éæäº¤ä»æ ¼å¼
--- FILE: main.py æ src/... ---
<éæåçä»£ç æä»¶>
--- FILE: docs/architecture.md ---
<æ´æ°åç architecture.mdï¼å
嫿è½è¯å«ï¼>
--- FILE: docs/database-design.md ---
<æ´æ°åç database-design.md>
--- FILE: docs/data-abstraction.md ---
<æ´æ°åç data-abstraction.md>
--- FILE: refactoring_report.md ---
<éææ¥å>
--- FILE: test_report.md ---
<æ´æ°åçæµè¯æ¥å>
èµæºç´¢å¼
- èæ¯ç¥è¯æ¨¡æ¿ï¼è§ references/background-template.md
- éæ±ææ¡£æ¨¡æ¿ï¼è§ references/requirements-template.md
- æ¶æææ¡£æ¨¡æ¿ï¼è§ references/architecture-template.md
- UV éå®æä»¶æ¨¡æ¿ï¼è§ references/uv-lock-template.md
- 任塿¸ 忍¡æ¿ï¼è§ references/todo-template.md
- æµè¯æ¥å模æ¿ï¼è§ references/test-report-template.md
- 项ç®è¯´ææ¨¡æ¿ï¼è§ references/readme-template.md
- åè½æ©å±æ¨¡æ¿ï¼è§ references/feature-extension-template.md
- éæè®¡å模æ¿ï¼è§ references/refactoring-plan-template.md
- æ°æ®åºéåæåï¼è§ references/database-selection-guide.md
- æ°æ®åºè®¾è®¡æ¨¡æ¿ï¼è§ references/database-design-template.md
- æ°æ®å±æ½è±¡æ¨¡æ¿ï¼è§ references/data-abstraction-template.md
注æäºé¡¹
æ ¸å¿è¦æ±ï¼å¼ºå¶ï¼
- UV å
管çï¼å¿
é¡»ä½¿ç¨ UV ä½ä¸ºå
管çå·¥å
·ï¼ä½¿ç¨
pyproject.toml管çä¾èµï¼uv.lockéå®çæ¬ - loguru æ¥å¿ï¼å¿ é¡»ä½¿ç¨ loguru è¿è¡æ¥å¿è®°å½
- Python 3.11+ ç¹æ§ï¼å¿ 须使ç¨ç±»å注解ãPEP 585 å ç½®æ³åç±»å
- 项ç®è§æ¨¡èªéåºï¼PM é¶æ®µè¯ä¼°è§æ¨¡ï¼æ¶æå¸é¶æ®µéæ©ç»ç»æ¹å¼
- çæ¬æ§å¶æºå¶ï¼ä½¿ç¨è¯ä¹åçæ¬ï¼vX.Y.Zï¼ï¼è®°å½çæ¬åå²
- æè½è¯å«ä¸ç®¡çï¼å¨æ¶æé¶æ®µè¯å«æè½ï¼å¨å®ç°é¶æ®µå¤ç¨æè½
- æ°æ®åºè®¾è®¡ä¸å®ç°ï¼æ ¹æ®éæ±éæ©åéçæ°æ®åºï¼SQLiteãPostgreSQLãMongoDBãåéæ°æ®åºã徿°æ®åºï¼
- æ°æ®å±æ½è±¡ï¼å¿ é¡»å®ç° Repository 模å¼ï¼æä¾ç»ä¸ç CRUD æ¥å£
- æ°æ®åºåæ¢è½åï¼æ¯æéè¿é ç½®åæ¢ä¸åæ°æ®åºå®ç°
æµç¨è¦æ±
- èªä¸»å¦ä¹ é¶æ®µï¼å¿ é¡»æ§è¡ç½ç»æç´¢ï¼ä¸å¾è·³è¿
- éæ±æ¾æ¸ éå¶ï¼PM é¶æ®µæå¤è¿è¡2轮交äºï¼è¶ è¿ååºäºå·²æä¿¡æ¯æ¨è¿
- æ è¿åº¦è®¾è®¡ï¼ä¸¥æ ¼æç §ç¨æ·éæ±å®ç°ï¼ä¸å¾æ·»å æªæåçåè½
- èæ¯ç¥è¯åºç¨ï¼åé¶æ®µå¿ é¡»åèååºç¨ background.md ä¸çç¥è¯
- 代ç è´¨éï¼ç¡®ä¿çæä»£ç å¯ç´æ¥è¿è¡ï¼å å«å®æ´çé误å¤ç
ææ¯éåï¼å¼ºå¶ï¼
- å¿ é¡»è¯¦ç»å¯¹æ¯è³å°2ç§æ¹æ¡
- å¿ é¡»è¯´ææè¡¡çç±ï¼æ§è½ vs æç¨æ§ãåè½ vs å¤æåº¦ï¼
- å¿ é¡»å¼ç¨ background.md ä¸çå¯¹æ¯æ°æ®
- å¿ é¡»è¯´æéæ©æ¹æ¡çä¼å¿åä¸è¶³
æ°æ®åºè¦æ±ï¼å¼ºå¶ï¼
- æ°æ®åºéåï¼æ ¹æ®é¡¹ç®éæ±éæ©åéçæ°æ®åºï¼åè database-selection-guide.md
- æ°æ®æ¨¡å设计ï¼è®¾è®¡åççæ°æ®è¡¨/éåç»æï¼å®ä¹ç´¢å¼çç¥
- æ°æ®è®¿é®å±ï¼å®ç° Repository 模å¼ï¼æä¾ç»ä¸ç CRUD æ¥å£
- ç±»åå®å ¨ï¼æææ°æ®è®¿é®å½æ°å¿ é¡»å å«ç±»å注解
- æ§è½ä¼åï¼åççç´¢å¼çç¥ãè¿æ¥æ± é ç½®ãæ¥è¯¢ä¼å
ç¶æåæ¥
- todo.md å¿ é¡»ä¸ requirements.md çåè½ç¹ä¸ä¸å¯¹åº
- æµè¯æ¥åå¿ é¡»è¦çææåè½ç¹ï¼å¹¶æç¡®æ 注éè¿ç¶æ
åè½æ©å±
- ä¼å è°ç¨å·²ææè½ï¼é¿å éå¤å¼å
- ç¡®ä¿æ°åè½ä¸ç°æä»£ç 飿 ¼ä¸è´
- æ´æ°ææç¸å ³ææ¡£ï¼å æ¬æ°æ®åºè®¾è®¡ææ¡£ï¼
- æ§è¡å彿µè¯
- æ°æ®åºæ©å±ï¼è¯ä¼°æ¯å¦éè¦æ°å¢è¡¨/éåãæ´æ° Repositoryãç¼åè¿ç§»èæ¬
éæ
- å åæåæ§è¡ï¼é¿å ç²ç®éæ
- ä¿æåè½ä¸åï¼ä» ä¼åå é¨å®ç°
- æ°æ®åºä¼åï¼ä¼åæ¥è¯¢ãç´¢å¼ãè¿æ¥æ±
- è®°å½éæååçå¯¹æ¯æ°æ®
- è¯å«å¹¶æåæè½æ¨¡å
使ç¨ç¤ºä¾
示ä¾1ï¼å¸¦æ°æ®åºçç¨æ·ç®¡çç³»ç»ï¼å¤§é¡¹ç®ï¼
- ç¨æ·éæ±ï¼”å®ç°ä¸ä¸ªç¨æ·ç®¡çç³»ç»ï¼æ¯æç¨æ·æ³¨åãç»å½ãä¿¡æ¯æ¥è¯¢”
- é¶æ®µ0ï¼æç´¢”æ°æ®åºéå”ã”SQLAlchemy vs MongoDB”ã”ç¨æ·è®¤è¯æä½³å®è·µ”ã”å¯ç å 寔ã”Python 3.11+ ç±»åæ³¨è§£”ã”UV å 管ç”ã”Repository 模弔
- PM é¶æ®µï¼
- æ¾æ¸ æ°æ®è§æ¨¡ãå¹¶åéæ±ãè®¤è¯æ¹å¼ãå¯ç åå¨
- æç¡®æ°æ®åºéæ±ï¼å ³ç³»åæ°æ®ï¼ç¨æ·ä¿¡æ¯ï¼ï¼é¢æ 10ä¸ç¨æ·
- è¯ä¼°é¡¹ç®è§æ¨¡ï¼5 个åè½ç¹ â ä¸åé¡¹ç® â éæ© PostgreSQLï¼æ¯æé«å¹¶åï¼
- Architect é¶æ®µï¼
- æ°æ®åºéåï¼PostgreSQLï¼å ³ç³»åï¼æ¯æé«å¹¶åï¼
- è®¾è®¡æ°æ®æ¨¡åï¼User 表ï¼id, username, email, password_hash, created_atï¼
- è®¾è®¡æ°æ®è®¿é®å±ï¼BaseRepository æ¥å£ãSQLAlchemyBaseRepositoryãUserRepository
- 设计 RepositoryFactoryï¼æ¯æ PostgreSQL / SQLite 忢
- ç´¢å¼çç¥ï¼usernameï¼UNIQUEï¼ãemailï¼UNIQUEï¼ãcreated_atï¼INDEXï¼
- éæ©å¤§é¡¹ç®æ¶æï¼src/repositories/ æ°æ®è®¿é®å±
- è¯å«æè½æ¨¡åï¼å¯ç å å¯ãToken çæ
- Senior Dev é¶æ®µï¼
- å®ç° BaseRepository æ¥å£ï¼CRUD æä½ï¼
- å®ç° SQLAlchemyBaseRepository
- å®ç° UserRepositoryï¼get_by_email, get_by_usernameï¼
- å®ç° RepositoryFactory
- ä½¿ç¨ Python 3.11+ ç¹æ§ãç±»åæ³¨è§£
- ä½¿ç¨ loguru è®°å½æ¥å¿
- çæ
pyproject.tomlï¼sqlalchemyãpsycopg2-binaryãalembicï¼
- éªè¯é¶æ®µï¼æµè¯ CRUD æä½ãå¹¶åæä½ãæ°æ®åºæ§è½ãç±»åæ³¨è§£ãæ°æ®è®¿é®å±æ½è±¡
示ä¾2ï¼ææ¡£ç®¡çç³»ç»ï¼MongoDBï¼
- ç¨æ·éæ±ï¼”å®ç°ä¸ä¸ªææ¡£ç®¡çç³»ç»ï¼æ¯æææ¡£çå¢å æ¹æ¥åå ¨ææç´¢”
- PM é¶æ®µï¼
- æ¾æ¸ ææ¡£æ ¼å¼ãå卿¹å¼ãæç´¢éæ±
- æç¡®æ°æ®åºéæ±ï¼ææ¡£åæ°æ®ï¼éè¦çµæ´» schema åå ¨ææç´¢
- è¯ä¼°é¡¹ç®è§æ¨¡ï¼4 个åè½ç¹ â å°é¡¹ç® â éæ© MongoDBï¼ææ¡£åï¼çµæ´» schemaï¼
- Architect é¶æ®µï¼
- æ°æ®åºéåï¼MongoDBï¼ææ¡£åï¼æ¯æå ¨ææç´¢ï¼
- è®¾è®¡æ°æ®æ¨¡åï¼Document éåï¼title, content, tags, metadata, created_atï¼
- è®¾è®¡æ°æ®è®¿é®å±ï¼MongoDBBaseRepositoryãDocumentRepository
- ç´¢å¼çç¥ï¼titleï¼TEXTï¼ãcontentï¼TEXTï¼ãtagsï¼MULTIKEYï¼
- Senior Dev é¶æ®µï¼
- å®ç° MongoDBBaseRepository
- å®ç° DocumentRepositoryï¼search_by_keywordï¼
- ä½¿ç¨ pymongoãç±»åæ³¨è§£
- éªè¯é¶æ®µï¼æµè¯ CRUD æä½ãå ¨ææç´¢ãæ§è½
示ä¾3ï¼åéæç´¢ç³»ç»ï¼ChromaDBï¼
- ç¨æ·éæ±ï¼”å®ç°ä¸ä¸ªåéæç´¢ç³»ç»ï¼æ¯æææ¡£çè¯ä¹æç´¢”
- PM é¶æ®µï¼
- æ¾æ¸ åé维度ãç¸ä¼¼åº¦åº¦éãæ°æ®è§æ¨¡
- æç¡®æ°æ®åºéæ±ï¼åéæç´¢ï¼é¢æ 100ä¸åé
- è¯ä¼°é¡¹ç®è§æ¨¡ï¼3 个åè½ç¹ â å°é¡¹ç® â éæ© ChromaDBï¼åéæ°æ®åºï¼è½»é级ï¼
- Architect é¶æ®µï¼
- æ°æ®åºéåï¼ChromaDBï¼åéæ°æ®åºï¼ä¸ä¸º LLM 设计ï¼
- è®¾è®¡æ°æ®æ¨¡åï¼ChromaDB éåï¼documents, embeddings, metadataï¼
- è®¾è®¡æ°æ®è®¿é®å±ï¼VectorRepository
- Senior Dev é¶æ®µï¼
- å®ç° VectorRepositoryï¼add_document, searchï¼
- ä½¿ç¨ chromadbãç±»åæ³¨è§£
- éªè¯é¶æ®µï¼æµè¯åéæ·»å ãç¸ä¼¼æ§æç´¢ãæ§è½
æè½è°ç¨æºå¶
è¯å«æ¶æº
- æ¶æé¶æ®µï¼é¶æ®µ2ï¼ï¼è¯å«å¯è½çå¯å¤ç¨æè½æ¨¡åï¼å¨ architecture.md ä¸å®ä¹
- å®ç°é¶æ®µï¼é¶æ®µ3ï¼ï¼å®ç°æ°åè½æ¶ï¼ä¼å è°ç¨å·²å®ä¹çæè½
- æ©å±é¶æ®µï¼é¶æ®µ5ï¼ï¼æ·»å åè½æ¶ï¼å¤ç¨å·²ææè½
- éæé¶æ®µï¼é¶æ®µ6ï¼ï¼éææ¶ï¼æåæ°çæè½æ¨¡å
æè½æ¥å£è§è
æææè½å¿ é¡»å å«ï¼
- 宿´çç±»åæ³¨è§£ï¼å½æ°åæ°åè¿åå¼å¿ 须使ç¨ç±»å注解
- æ¸ æ°çææ¡£å符串ï¼è¯´æåè½ãåæ°ãè¿åå¼ã使ç¨åºæ¯
- 示ä¾ä»£ç ï¼å¨ architecture.md 䏿ä¾è°ç¨ç¤ºä¾
- ä¾èµå£°æï¼æç¡®ä¾èµçå ¶ä»æè½æåº
å¤ç¨åå
- ä¼å å¤ç¨ï¼å®ç°æ°åè½æ¶ï¼ä¼å è°ç¨å·²ææè½
- æ¥å£ç¨³å®ï¼æè½æ¥å£åºä¿æç¨³å®ï¼é¿å é¢ç¹ä¿®æ¹
- åä¸èè´£ï¼æè½åºå ·æåä¸èè´£ï¼åè½æ¸ æ°
- 坿µè¯æ§ï¼æè½åºæäºåç¬æµè¯
æ°æ®è®¿é®æè½
以䏿°æ®è®¿é®å±æ¨¡åå¯ä½ä¸ºæè½å¤ç¨ï¼
- BaseRepository æ¥å£ï¼éç¨ç CRUD æ¥å£
- SQLAlchemyBaseRepositoryï¼å ³ç³»åæ°æ®åºçéç¨å®ç°
- MongoDBBaseRepositoryï¼MongoDB çéç¨å®ç°
- RepositoryFactoryï¼æ°æ®åºåæ¢å·¥å