Skip to content

Latest commit

 

History

History
23 lines (19 loc) · 2.06 KB

2023-12-25-mon.md

File metadata and controls

23 lines (19 loc) · 2.06 KB

TIL

  • virtumall

  • Django db.models의 Model

    • Model의 objects 객체(Cart 모델을 정의했다고 하면, Cart.objects)는 Manager이며 Manager를 통해 기본 CRUD를 수행할 수 있다.
    • QuerySet은 lazy object이다. QuerySet이 반환되었다고 db에 질의를 한 것이 아니며, django는 QuerySet이 평가될 때 db에 질의한다.
    • When QuerySet Evaluated ? : iteration, slicing, Pickling/Caching, & call repr(), len(), bool()
    • Q. Cart.objects.all() 했을 때, db hit 일어나지 않는가? 그럼 pk는 어디서 가져오지?
  • Django 복잡한 Query의 동작

  • virtumall 진행 중, Error 처리나 데이터 Validate의 범위에 대해 고민하다가 Architecture Design에 대한 글을 보게 되었다.

    • Django에 DDD를 완벽하게 적용하려면 어려움이 따르는데, 핵심적인 어려움은 Django의 Model 데이터 저장소 구현방식이 Active Record여서이다. Active Record는 데이터 자체와 데이터 access 기능이 함께 정의되어 있는 패턴이다. DDD는 데이터를 Repository Pattern으로 다루는 것을 상정하고 있기 때문에 적용이 어렵다.
    • Django에 DDD를 어떻게 적용하면 좋을지에 대해서는 아래와 같이 소개했다. 5)로 완전 적용하는 방식은 복잡하지만 좀더 단단한 DDD 방식의 구현을 할 수 있다. 관련한 포스팅은 우선 링크로 첨부한다. DDD 관련 더 깊은 이해가 있어야 더 잘 이애할 수 있을 것 같다.
      1. Bounded Context 정의(필수)
      2. Domain Event 정의(필수)
      3. Application Logic을 분리(권장)
      4. Model에 주요 메서드를 구현하기(일부만 적용 가능)
      5. Repository(Tradeoff)

References

Django Unchained: Repository Pattern Django와 DDD는 함께 할 수 없는 것일까?