저는 Django에서 프로젝트를 작성 중이며 코드의 80%가 models.py
파일에 있다는 것을 알았습니다. 이 코드는 혼란스럽고 일정 시간이 지나면 실제로 무슨 일이 일어나고 있는지 더 이상 이해하지 못합니다.
저를 괴롭히는 것은 다음과 같습니다.
- 제 모델이 레벨(데이터베이스의 데이터 작업만 담당)도 이메일을 보내고, API를 통해 다른 서비스로 이동하는 등의 작업을 수행합니다.
- 또한 비즈니스 로직을 이렇게 하면 제어하기 어려워지기 때문입니다. 예를 들어 내 애플리케이션에는
User
의 새 인스턴스를 만드는 방법이 최소한 세 가지 있지만 기술적으로는 인스턴스를 균일하게 만들어야 합니다. - 메소드와 내 모델의 속성은 결정적이지 않고 부작용이 생길 때 발생합니다.
여기에 간단한 예가 있습니다. 처음에 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])
내가 원하는 것은 내 코드에서 엔터티를 분리하는 것입니다.
- 내 데이터베이스의 엔터티, 지속성 수준: 내 애플리케이션은 어떤 데이터를 유지합니까?
- 내 애플리케이션의 엔터티, 비즈니스 논리 수준: 내 애플리케이션은 무엇을 합니까?
이러한 구현을 위한 모범 사례는 무엇입니까? n Django에 적용할 수 있는 접근 방식은 무엇입니까?