오늘 저는 데이터베이스 매핑 클래스에 메서드를 추가하는 방법과 위치에 대해 조직의 다른 개발자와 열띤 토론을 벌였습니다. 우리는 sqlalchemy
데이터베이스 모델에서 기존 코드베이스의 주요 부분은 데이터베이스 테이블에서 파이썬 객체로 거의 기계적으로 변환되는 클래스 이름을 가진 매핑 된 속성 모음에 지나지 않습니다.
논점에서, ORM 사용의 주요 가치는 낮은 수준의 동작과 알고리즘을 매핑 된 클래스에 첨부 할 수 있다는 것이 었습니다. 모델은 먼저 클래스이고, 2 차적으로 영구적입니다 (파일 시스템에서 xml을 사용하여 지속적 일 수 있으므로 신경 쓸 필요가 없습니다). 그의 견해는 모든 행동은 "비즈니스 로직"이며, 데이터베이스 지속성에만 사용되는 지속적 모델을 제외한 모든 위치에 속해야한다는 것이었다.
필자 는 비즈니스 로직 이 무엇인지 구분해야한다고 생각합니다. 비즈니스 로직이 구현되는 방식의 하위 수준과 분리되어 있기 때문에 분리해야한다고 생각합니다. 도메인 로직은 모델 클래스에서 제공하는 추상화라고 생각합니다. 이전 단락에서 논쟁했지만, 나는 그것이 무엇인지에 손가락을 대는 데 어려움을 겪고 있습니다. API가 무엇인지 (우리의 경우 HTTP "ReSTful") 더 잘 이해할 수 있습니다. 사용자 는 수행 하려는 작업과 수행 할 수있는 작업 및 수행 방법과는 별도로 API를 호출 합니다. 끝난다.
tl; dr : ORM을 사용할 때 매핑 된 클래스에서 메소드에 어떤 종류의 것들을 사용할 수 있거나해야합니까, 또 다른 추상화 계층에 살려면 무엇을 제외해야합니까?