본문 바로가기

소프트웨어 이야기/장고와 루비온레일즈

[django] 자주 사용되는 query set 모아서 관리하기 자주 사용되는 query set들을 한군데 모아서 관리하는 방법을 설명해보고자 합니다 :) 1. manager.py 를 만들어서, query set을 추가합니다class LessonQuerySet(models.QuerySet): def jazz(self): return self.filter(subject='jazz') 2. model에 query set을 manager으로 등록해줘야합니다 class Lesson(models.Model): from_time = models.CharField() to_time = models.CharField() subject = models.CharField() objects = LessonQuerySet.as_manager() 3. custom query set 사용하기..
Django VS Ruby On Rails Django가 루비온레일즈를 보고 만들었다고 하는데, 어떤 점이 같고 다른지 정리해보고자 한다. 공통점1. 마이그레이트 파일로 테이블을 관리한다. 레일즈가 schema_migrations 테이블에 마이그레이트 코드를 관리한다면, 장고는 애플리케이션이름과 마이그레이트 파일명 단위로 마이그레이트 코드를 관리한다. 2. 기타 등등* 마이그레이트로 테이블을 만들면, 자동으로 id 필드를 추가해준다. * 모델의 CRUD 페이지를 자동으로 만들어주는 어드민 기능이 루비온레일즈의 스캐폴드 기능이랑 유사하다. * 루비온레일즈에서 레코드가 추가/수정된 시각을 created_at, updated_at에 저장하는 것 처럼, 장고도 비슷한 개념이 있다. 다른점1. 루비온레일즈는 MVC 모델을 기반으로 작성된다. 그런데 Dja..
레일즈에 Service/Decorator Layer 적용하기 (8) - 끝~ 이 포스팅은
레일즈에 Service/Decorator Layer 적용하기 (7) - Helper 대신에 Decorator 사용하기 이 포스팅은
레일즈에 Service/Decorator Layer 적용하기 (6) - Service Object으로 콜백 옮기기 이 포스팅은
레일즈에 Service/Decorator Layer 적용하기 (5) - Form Object에서 유효성 체크하기 이 위키는 Build Sleek Rails Components With Plain Old Ruby Objects을 정리한 글입니다 :) 저자는 모델 객체에서는 association과 constant만 관리되는게 더 로직을 깔끔하게 만든다고 이야기했었습니다. 그래서 유효성 체크와 callback 로직은 model에서 다루지 않아야한다고 했죠. 그래서 이번 챕터에서는 model 객체에 있던 유효성 로직을 지우고, 대신에 form object를 사용하도록 하는 방법을 설명하고자 합니다. Form Object란?Form Object는 Plain Old Ruby Object입니다. 그리고 이건 데이터베이스를 호출해야할 때, controller와 service Object에서 사용되는 객체입니다. Form Obje..
레일즈에 Service/Decorator Layer 적용하기 (4) - Service Object 이 포스팅은
레일즈에 Service/Decorator Layer 적용하기 (3) - Service Object 이 포스팅은 이 길어져서, 두번째 글을 정리해보고자 합니다.Service Object는 비즈니스 로직의 일부를 옮긴 클래스입니다. Skiny Controller Fat Model 스타일에서는, 한 객체에 여러 비즈니스 로직이 포함되게 됩니다. 반면, Service Object를 사용하면 여러 클래스가 생성되고, 각 클래스는 하나의 목적을 위해 존재하게 됩니다. 왜 Service Object를 사용해야할까요? 1. 디커플링서비스 객체를 사용하면 객체 간에 독립성을 유지하는 데에 도움이 됩니다. 2. 가독성이름이 잘 지어진 서비스 객체를 사용하면 어플리케이션이 무슨 일을 하는 건지 찾기 쉽습니다. 서비스 디렉토리만 보면, 이 애플리케이션이 어떤 역할을 하는지 쉽게 알아차릴 수 있습니다. 3. 모델과 컨트롤러..