5 पॉइंट द्वारा GN⁺ 2025-03-29 | 2 टिप्पणियां | WhatsApp पर शेयर करें
  • TDD with Python के लेखक Harry और software architect Bob की किताब, जो बताती है कि जटिल software architecture को कैसे समझें और manage करें
  • इसमें e-commerce कंपनी में वास्तव में इस्तेमाल की गई architecture techniques को व्यवस्थित करके साझा किया गया है
  • MADE.com यूरोप-आधारित online furniture retail कंपनी है, जो global supply chain चलाती है
    • लक्ष्य logistics optimization के ज़रिए inventory को न्यूनतम रखना और consumer order के साथ ही logistics arrival को समन्वित करना है
  • लेकिन वास्तविक दुनिया जटिल और अप्रत्याशित है, इसलिए इसे प्रतिबिंबित करने वाला intelligent software बनाकर automation किया जा रहा है
  • यह किताब ऐसे ही real-world problems को हल करने के लिए बनाए गए architecture patterns पर केंद्रित है

Python क्यों

  • Python दुनिया भर में तेज़ी से बढ़ने वाली language है और अब अधिक जटिल enterprise problems को भी tackle कर रही है
  • मौजूदा architecture किताबों में ज़्यादातर Java या C# आधारित examples होते हैं, इसलिए Python users के लिए उन तक पहुँचना कठिन होता है
  • यह किताब Python community के लिए उपयुक्त तरीके से classic architecture patterns को पेश करती है

TDD, DDD, event-driven architecture का परिचय

  • TDD (Test-Driven Development):
    • test-first development स्थिर refactoring और feature addition को संभव बनाता है
    • तेज़ और dependency-free unit tests को प्राथमिकता देनी चाहिए, और धीमे व अस्थिर end-to-end tests को न्यूनतम रखना चाहिए
  • DDD (Domain-Driven Design):
    • यह business domain model पर ध्यान देता है, लेकिन infrastructure और framework dependencies को कम रखना महत्वपूर्ण है
  • event-driven architecture:
    • microservices के बीच message-based communication के ज़रिए जटिलता को manage किया जाता है
    • Flask, Django, Celery जैसे मौजूदा Python tools के साथ इसे कैसे integrate किया जाए, इस पर विचार ज़रूरी है

संदर्भ: इस किताब में शामिल अधिकांश patterns monolithic architecture पर भी लागू किए जा सकते हैं

  • इस किताब का उद्देश्य Python में TDD, DDD और event-driven services को support करने वाले architecture patterns को परिचित कराना और उनके application methods बताना है

इस किताब के लक्षित पाठक

  • ऐसे developers जिन्होंने जटिल Python applications के साथ काम किया है
  • architecture patterns या DDD का background knowledge न हो, तब भी ठीक है
  • यह इस तरह से बनाई गई है कि TDD की उस शैली से अपरिचित पाठक भी इसे follow कर सकें, जिसमें पहले tests लिखे जाते हैं और फिर implementation किया जाता है
  • Flask, SQLAlchemy, pytest, Docker, Redis आदि का उपयोग किया गया है, लेकिन उनका ज्ञान अनिवार्य नहीं है
  • लक्ष्य किसी खास technology के बजाय technology-independent architecture design है

सीखने की सामग्री का अवलोकन

Part 1

  • domain modeling और DDD (अध्याय 1, 2, 7)
    • external dependencies के बिना domain model बनाने का तरीका प्रस्तुत किया गया है
    • तेज़ unit tests लिखने के तरीके और data integrity के साथ उनके संबंध पर विचार
    • उपयुक्त Aggregate चुनने का तरीका समझाया गया है
  • Repository, Service Layer, Unit of Work patterns (अध्याय 2, 4, 5)
    • persistence layer को abstract करके model को external dependencies से अलग किया जाता है
    • system entry point के रूप में service layer design
    • Flask API या CLI जैसे thin entry points बनाने के लिए उपयुक्त
  • testing और abstraction पर विचार (अध्याय 3, 5)
    • उपयुक्त abstraction layer चुनने के मानदंड और उसकी भूमिका की पड़ताल
    • abstraction के उच्च स्तर पर unit tests लिखकर test pyramid हासिल करना

Part 2

  • event-driven architecture (अध्याय 8–11)
    • Domain Events, Message Bus, Handler patterns का परिचय
    • events के माध्यम से system के भीतर interactions trigger किए जाते हैं
    • events का उपयोग करके microservices के बीच integration के तरीके समझाए गए हैं
    • command और event के बीच अंतर स्पष्ट किया गया है
    • पूरी application एक message-processing system में बदल जाती है
  • CQRS (Command-Query Responsibility Segregation) (अध्याय 12)
    • command और query responsibilities को अलग करके structural efficiency का परिचय
    • events के उपयोग और बिना events वाले implementation examples शामिल हैं
  • dependency injection (अध्याय 13)
    • explicit/implicit dependencies को व्यवस्थित किया गया है
    • एक सरल dependency injection framework को implement किया गया है

परिशिष्ट और प्रैक्टिस गाइड

  • मौजूदा project में लागू करने के तरीके (epilogue)
    • साधारण examples की तुलना में मौजूदा system पर patterns लागू करना अधिक कठिन होता है
    • इसके लिए application strategies और reference materials दिए गए हैं
  • code practice और GitHub examples
    • किताब की पूरी सामग्री को एक example project के रूप में व्यवस्थित किया गया है
    • हर अध्याय के लिए GitHub branches में code दिया गया है
    • अभ्यास के तरीके:
      • example app को खुद बनाते हुए साथ-साथ implement करना
      • अपने project में patterns लागू करके देखना
      • हर अध्याय के "Exercise for the Reader" का उपयोग करके practice code लिखना

टिप: हर अध्याय की शुरुआत में GitHub की संबंधित branch को checkout करके वास्तविक working code के साथ सीखना अनुशंसित है

2 टिप्पणियां

 
xguru 2025-03-29

इसका कोरियाई संस्करण उपलब्ध है पायथन से समझे गए आर्किटेक्चर पैटर्न

 
GN⁺ 2025-03-29
Hacker News राय
  • यह किताब architecture patterns पर एक goldmine जैसी है। मुझे पसंद है कि यह विषय को आसानी से समझने लायक बनाती है

    • लेकिन व्यावहारिक रूप से ये patterns complexity और performance issues पैदा कर सकते हैं। खासकर जब आप Django जैसे पहले से ही opinionated framework का इस्तेमाल कर रहे हों
    • मुझे बड़ी और छोटी दोनों तरह की कंपनियों में Python इस्तेमाल करने का अनुभव है। सख्त architecture patterns इस्तेमाल करने वाली बड़ी कंपनियों का code "clean" होता है, लेकिन बहुत ज़्यादा complex और slow होता है
    • दूसरी ओर, patterns को नज़रअंदाज़ करने वाली बड़ी कंपनियों का code सच में बिखरा हुआ था, लेकिन productivity ऊँची थी। Code बिखरा होने पर भी उसे पढ़ा, समझा और बदला जा सकता था
    • यह शायद मेरे बारे में भी कुछ कहता हो, लेकिन मैं unstructured code वाली कंपनियों में ज़्यादा productive था। "clean code" पर होने वाली बहसों से बचा जा सकता था
  • इस किताब के कुछ हिस्से बहुत उपयोगी हैं। खासकर जब यह Python या किसी खास भाषा तक सीमित न रहने वाले concepts को कवर करती है

    • लेकिन दूसरे हिस्सों में समस्याएँ हैं। जब कम अनुभवी developer एक साथ सब कुछ implement करने की कोशिश करते हैं, तो यह जोखिम भरा हो सकता है
    • उदाहरण के लिए, repository pattern आम तौर पर उपयोगी है, लेकिन किताब के examples सहित कई मामलों में यह सिर्फ complexity बढ़ाता है
    • service layer और unit of work complex applications में उपयोगी हैं, लेकिन छोटे services से बने systems में ये ज़रूरत से ज़्यादा भारी हो सकते हैं
    • design patterns भी दूसरे tools की तरह हैं; यह समझना ज़रूरी है कि इन्हें कब इस्तेमाल करना है और कब नहीं। किताब इस बारे में सलाह देती है, लेकिन इस पर और ज़ोर होना चाहिए
  • मैं Python को एक अच्छा glue language मानता हूँ

    • जबरन थोपे गए OOP mindset पर एक criticism। हर चीज़ पर encapsulation और inheritance थोपने पर एक criticism
    • SOLID, clean coding, clean architecture, GoF patterns, Uncle Bob पर एक criticism
    • मैं imperative या functional flow का पालन करता हूँ और जितना संभव हो उतना कम OOP इस्तेमाल करता हूँ
    • Python इस्तेमाल करते समय मैं objects और patterns के बिना वाला अनुभव चाहता हूँ
    • इसका मतलब यह नहीं कि यह किताब बेकार है। Patterns सीखने में यह उपयोगी है। लेकिन हर चीज़ को वास्तविक programming पर ज़बरदस्ती फिट नहीं करना चाहिए
  • मैं Typescript developer हूँ, लेकिन यह किताब मेरी पसंदीदा architecture किताबों में से एक है। मैं इसे हमेशा refer करता हूँ

    • testing के लिए fake unit of work/service pattern का मैं लगभग धार्मिक रूप से इस्तेमाल करता हूँ। यह third-party services को fake बनाने में मदद करता है
    • events को domain-specific तरीके से नाम देने की सलाह दी जाती है। इससे उन हिस्सों को संभालना आसान होता है जिन्हें teammates को समझाना झंझट भरा होता है
    • Cosmic Python पूरी तरह online उपलब्ध है, इसलिए इसे link करना आसान है। कुल मिलाकर यह एक शानदार और formative resource है
  • मैंने कुछ साल पहले से Python को पेशेवर रूप से लिखना शुरू किया। मैं Kotlin और TypeScript से आया था, और भाषा approachable लगी, लेकिन loose coupling और testability हासिल करने में कठिनाई हुई

    • एक सहकर्मी की सिफारिश पर मैंने यह किताब खरीदी और शुरू से अंत तक पढ़ी। इससे मुझे complex Python codebases में complexity को manage करने का तरीका समझने में मदद मिली
    • मैं हर pattern का पालन नहीं करता, लेकिन मुझे यह समझ आया कि possibilities क्या हैं और दूसरे paradigms के अनुभव को Python में कैसे लागू किया जा सकता है
    • ज़ोरदार सिफारिश करता हूँ। यह क़ीमती है
  • यह सच में शानदार Python programming किताबों में से एक है। बस code में static typing नहीं थी, जो थोड़ा खला, लेकिन यह लेखक का जानबूझकर लिया गया फैसला था

  • इतने शानदार resource को share करने के लिए धन्यवाद

  • मैंने इस किताब का paperback 2.5 या 3 साल पहले पढ़ा था। बहुत आनंद आया। यह testing को first-class topic बनाए रखती है और हर addition के साथ लगातार अपडेट करती है

    • tests का तैयार होना, लिखने में आसान होना और update करने में आसान होना development process को और आनंददायक बनाता है। Problems देखने के लिए manually code चलाने की ज़रूरत कम पड़ती है
    • event-driven हिस्सा दिलचस्प था, लेकिन मेरी मौजूदा नौकरी में इसे implement करना practical नहीं था
  • Polylith का कोई ज़िक्र नहीं है। सोच रहा हूँ कि क्या यह relevant है

  • यह किताब पढ़ने के लिए शानदार थी। 3 साल पहले मैं C#/.NET DDD environment में काम करता था, और अब Python में इन concepts को फिर से देखते हुए इनके essential हिस्सों को और साफ़ तरीके से समझ पा रहा हूँ

    • अगर आपकी रुचि ऐसे विषयों में है, तो मैं इसकी ज़ोरदार सिफारिश करता हूँ