django에서 비즈니스 로직과 데이터 접근 분리

| | | | | | | | | | | | | | | | | |

저는 Django에서 프로젝트를 작성 중이며 코드의 80%가 models.py 파일에 있다는 것을 알았습니다. 이 코드는 혼란스럽고 일정 시간이 지나면 실제로 무슨 일이 일어나고 있는지 더 이상 이해하지 못합니다.

저를 괴롭히는 것은 다음과 같습니다.

  1. 제 모델이 레벨(데이터베이스의 데이터 작업만 담당)도 이메일을 보내고, API를 통해 다른 서비스로 이동하는 등의 작업을 수행합니다.
  2. 또한 비즈니스 로직을 이렇게 하면 제어하기 어려워지기 때문입니다. 예를 들어 내 애플리케이션에는 User의 새 인스턴스를 만드는 방법이 최소한 세 가지 있지만 기술적으로는 인스턴스를 균일하게 만들어야 합니다.
  3. 메소드와 내 모델의 속성은 결정적이지 않고 부작용이 생길 때 발생합니다.

여기에 간단한 예가 있습니다. 처음에 User 모델은 다음과 같았습니다.

class User(db.Models): def get_present_name(self): return self.name 또는 "Anonymous" def activate(self): self.status = "activated" self.save() 

시간이 지남에 따라 다음과 같이 변경되었습니다.

class User(db .Models): def get_present_name(self): # 속성은 데이터베이스 측면에서 비결정적입니다. # 데이터는 api에 의해 다른 서비스에서 가져옵니다. return remote_api.request_user_name(self.uid) 또는 "Anonymous" def activate(self): # 메서드 이제 부작용이 있습니다(사용자에게 메시지 보내기) self.status = "activated" self.save() send_mail("귀하의 계정이 활성화되었습니다!", "‚Ķ", [self.email]) 

내가 원하는 것은 내 코드에서 엔터티를 분리하는 것입니다.

  1. 내 데이터베이스의 엔터티, 지속성 수준: 내 애플리케이션은 어떤 데이터를 유지합니까?
  2. 내 애플리케이션의 엔터티, 비즈니스 논리 수준: 내 애플리케이션은 무엇을 합니까?

이러한 구현을 위한 모범 사례는 무엇입니까? n Django에 적용할 수 있는 접근 방식은 무엇입니까?